Node JS 应用仅显示第一个 JSON 对象。为什么?

Node JS app only display the first JSON object. Why?

我正在尝试在我的节点应用程序中编写一个 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的新手,觉得这个很容易解决,但我还是找不到解决办法。

res.json 实际上是将数据转换为 JSON。我愿意打赌它没有处理某些事情,或者只是搞砸了。如果 Twilio 的响应已经是 json,您可能不需要这样做。尝试 res.send,而不是 returns 无论你得到什么。

res.json(...); 发回响应。您是在数组的第一次迭代中这样做的,因此客户端只会收到第一条消息。

如果您想从所有消息中提取 body 并将它们全部发回,请执行此操作。用你想要的数据创建一个数组并将它发回。示例:

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

每个请求只能调用一次 res.json。您在循环中多次调用它。第一次调用它时,浏览器会收到响应,并且所有其他 res.json 调用都会出现 headers already sent 异常(或类似的异常)。