Node JS app只显示第一个JSON对象。为什么?

时间:2015-03-03 21:17:14

标签: javascript json node.js twilio

我正在尝试在我的节点应用程序中编写一个json对象,集成了Twilio API。当控制台记录对象时,所有对象都会正确返回,但是当我将其写入文档时,只会写入第一个对象。为什么?我应该如何更改代码以查看与我的控制台日志中相同的书面响应。

var express = require('express');
var app = express();

app.use(express.bodyParser());

app.get('/', function(req, res) {
    var accountSid = 'xxx'; 
    var authToken = 'xxx'; 

    var client = require('twilio')(accountSid, authToken); 

    client.messages.list({ 
        from: "xxx", 
        to: "xxx" 
    }, function(err, data) { 
        data.messages.forEach(function(message) { 
                console.log(message.body); // THIS WILL DISPLAY ALL OBJECTS
                res.json(message.body); // THIS WILL ONLY DISPLAY THE FIRST OBJECT 
        });
    });
});

app.listen(1337);

我是Node JS的新手并认为这很容易解决,但我仍然无法找到解决方案。

3 个答案:

答案 0 :(得分:1)

res.json(...);发回回复。你是在数组的第一次迭代中这样做的,因此客户端只获得第一条消息。

如果要从所有邮件中提取body并将其全部发回,请执行此操作。创建包含所需数据的数组并将其发回。例如:

res.json(data.messages.map(function(message) {
    return message.body;
}));

答案 1 :(得分:1)

每个请求只能拨打res.json一次。你在一个循环中多次调用它。第一次调用它时,浏览器会收到响应,并且您将获得所有其他res.json调用的headers already sent个例外(或类似的事情)。

答案 2 :(得分:0)

res.json实际上是将数据转换为JSON。我愿意打赌有些东西没有处理,或者它只是搞砸了。如果来自Twilio的响应已经是json,那么您可能不需要这样做。尝试使用res.send,它只返回你得到的任何东西。