首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用Node.js返回复杂的JSON响应?

如何用Node.js返回复杂的JSON响应?
EN

Stack Overflow用户
提问于 2012-01-18 13:28:36
回答 2查看 116K关注 0票数 82

使用nodejs和express,我想使用JSON返回一个或多个对象(数组)。在下面的代码中,我一次输出一个JSON对象。它可以工作,但这并不完全是我想要的。生成的响应不是有效的JSON响应,因为我有许多对象。

我很清楚,我可以简单地将所有对象添加到一个数组中,然后在res.end中返回该特定的数组。然而,我担心这可能会变得非常繁重,需要大量的处理和内存。

使用nodejs实现这一点的正确方法是什么?调用query.each是正确的方法吗?

代码语言:javascript
复制
app.get('/users/:email/messages/unread', function(req, res, next) {
    var query = MessageInfo
        .find({ $and: [ { 'email': req.params.email }, { 'hasBeenRead': false } ] });

    res.writeHead(200, { 'Content-Type': 'application/json' });   
    query.each(function(err, msg) {
        if (msg) { 
            res.write(JSON.stringify({ msgId: msg.fileName }));
        } else {
            res.end();
        }
    });
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-22 19:21:58

在express 3中,您可以直接使用res.json({foo:bar})

代码语言:javascript
复制
res.json({ msgId: msg.fileName })

请参阅documentation

票数 182
EN

Stack Overflow用户

发布于 2012-01-18 22:46:35

我不知道这是否真的有什么不同,但您可以这样做,而不是迭代查询游标:

代码语言:javascript
复制
query.exec(function (err, results){
  if (err) res.writeHead(500, err.message)
  else if (!results.length) res.writeHead(404);
  else {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.write(JSON.stringify(results.map(function (msg){ return {msgId: msg.fileName}; })));
  }
  res.end();
});
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8905613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档