node.js:带有mongoose的expressjs

时间:2011-04-09 22:11:09

标签: mongodb node.js mongoose express

我正在处理我的第一个node.js / express / mongoose应用程序,由于node.js的异步机制,我遇到了问题。我似乎没有正确地做这件事......

这是我使用express定义的测试路径:

app.get('/test', function(req, res){
  var mod = mongoose.model('MyModel');
  mod.find({},function(err, records){
    records.forEach(function(record){
      console.log('Record found:' + record.id);
      // res.send('Thing retrieved:' + record.id);
    });
  });
});

当我发出http://localhost/test时,我想在响应中获取“MyModel”类型的记录列表。

上面的代码工作正常但是当它将整个列表返回给客户端时...它不起作用(注释的res.send行)并且只返回第一条记录。

我对node.js很新,所以我不知道在app.get的第一个回调函数中嵌入几个回调函数是不是很好的解决方案。我怎么能把整个清单归还?

有什么想法吗?

1 个答案:

答案 0 :(得分:9)

你应该做的是:

mod.find({},function(err, records){
  res.writeHead(200, {'Content-Length': body.length});
  records.forEach(function(record){
    res.write('Thing retrieved:' + record.id);
  });
});

请始终查看文档:

http://nodejs.org/docs/v0.3.8/api/http.html#response.write

我错过了你使用express,send函数是express的一部分,并且扩展了node(我的坏)的serverResponse对象。

但我的回答仍然适用,express的send函数使用ServerResponse.end()发送数据,因此套接字get关闭,你不能再发送数据了,使用write函数使用本机函数。

您可能还希望在请求完全完成时致电res.end(),因为快递中的某些项目可能会受到影响