node.js如何使用json对象数组发送响应?

时间:2013-03-29 14:21:04

标签: javascript json node.js module pivotaltracker

我想使用pivotal-node模块为node.js返回完成的关键故事数组。

app.get('/delivered_stories', function(request, response) {             
  pivotal.useToken("my_token");
  pivotal.getProjects(function (err, data) {
    var project_ids = data.project.map(function(x) { return parseInt(x.id); });
    console.log('Retrived project ids: '.blue + project_ids);

    project_ids.forEach(function(id) {
      pivotal.getStories(id, { filter: "state:finished" }, function(err, story) {
        response.send(story);
      });
    });
    response.end(); // End the JSON array and response.
  });
});

我做错了什么?以及如何解决它?我收到一个错误:

http.js:708
    throw new Error('Can\'t set headers after they are sent.');
          ^
Error: Can't set headers after they are sent.

整个代码:https://gist.github.com/regedarek/30b2f35e92a7f98f4e20

1 个答案:

答案 0 :(得分:2)

pivotal.getStories() 异步

其回调(因此response.send())会在之后>其余代码(包括response.end()

运行一段时间

事实上,你根本不应该打电话给response.end(); response.send()为你做到了。

您也不能多次拨打response.send();你需要将所有结果组合成一个数组并发送它。
这并不简单;考虑使用async.js或promises。