NodeJS应用程序只显示第一个JSON对象.为什么?

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

本文关键字:对象 为什么 JSON 第一个 应用程序 显示 NodeJS      更新时间:2023-09-26

我正在尝试在我的节点应用程序中编写一个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);

我是NodeJS的新手,认为这很容易解决,但我仍然找不到解决方案。

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

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

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

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

res.json实际上是将数据转换为json。我敢打赌,它没有处理一些事情,或者只是把事情搞砸了。如果Twilio的响应已经是json,那么您可能不需要这么做。试试res.send,它只会返回你得到的任何东西。