【问题标题】:Express.js collection.find() return ObjectExpress.js collection.find() 返回对象
【发布时间】:2015-02-09 12:22:19
【问题描述】:

我想显示存储在我的 mongodb 中的每个文档。我尝试了以下代码,它只是获取 collection.find() 并通过 res.send() 显示

router.get('/index', function(req,res){
var db = req.db
var collection = db.get('usercollection')

var display = util.inspect(collection.find()));
res.send(display);
});

我希望它显示存储在 mongodb 中的实际文档。但相反,它显示了这种对象格式:

{cold:{manager:{driver:[Object], helper:[Object], collection:[Object].....

显示原始 mongodb 文档还需要其他步骤吗?

【问题讨论】:

  • 这是一个卑鄙的堆栈兄弟

标签: javascript json node.js mongodb express


【解决方案1】:

如果你使用的库是official 10gen library,那么你不能简单地输出collection.find()而不展开它。对于较小的数据集,最简单的方法是

collection.find().toArray(function(err, results) {
  if (err) {
      // do something error-y
  } else {
      res.send( results );
  }
});

如果您发布更多代码,并使用您正在使用的库标记您的问题,您将能够获得更有针对性的帮助。如果您正在使用的库返回 promise,那么您可能会这样解开它:

collection.find().then(function(results){
    res.send(results);
}).catch(function(err){
    console.error(err);
});

【讨论】:

  • 我相信,您每次请求只能使用一次res.send
  • 谢谢!这正是我探索 StackOverflow 后所尝试的。我有一个错误说“对象 # 没有方法 'toArray'。似乎 toArray 不是默认方法?
  • 我已经更新了我的答案,包括我对您如何处理 Promise 返回对象的最佳猜测。
  • @thefourtheye, res.end() 是您只能使用一次的功能。 res.send 可以多次使用。 @Taewan 应该注意,需要明确关闭响应。很多人只用res.end( response_object )一次就可以发送和关闭,让你不用记住关闭连接
猜你喜欢
  • 2015-02-13
  • 2014-05-23
  • 2013-04-04
  • 2021-03-18
  • 1970-01-01
  • 2012-12-21
  • 2023-04-06
  • 1970-01-01
相关资源
最近更新 更多