在一个呼叫中多次搜索一个集合

时间:2018-12-23 20:06:31

标签: node.js mongodb express mongoose

我有一个带有多个值的数组,需要将这些值用作查询集合的查询。我不确定使用一种方法执行此操作的方法。例如:

router.get('/', ensureAuthenticated, (req, res) => {
let ArrayOfIds = [id1, id2, id3]

Movie.find({user: req.user.id}).then(items => {
//Something along this lines 
 items.subscriptions.forEach(subscription => {
 Movie.find({user: subscription})
  //This wont work beacuse of the callback promise
   .then(movies => {
    items.push(movies)
 })
 })
res.render('index/home',
 {pageName: 'Movies', items: items})
 .catch(err => console.log(err));
});
})

我想为每个id搜索相同的集合(电影)并将其添加到items对象。使用for循环执行此操作似乎会产生设置标头错误。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

此S / O响应应该有您的答案...

Error: Can't set headers after they are sent to the client

从响应中:

  

错误“错误:发送标头后无法设置标头”。意思是   您已经处于“身体”或“完成”状态,但是尝试了某些功能   设置标题或statusCode。当您看到此错误时,请尝试查看   对于任何试图在正文部分发送后发送标头的内容   已经写好了。例如,寻找   不小心被叫了两次,或者在身体被撞后发生了任何错误   已发送。

     

在您的情况下,您调用了res.redirect(),从而导致响应   完成。然后,您的代码引发了错误(res.req为空)。和   由于错误发生在您的实际功能(req,res,next)内   (不在回调中),Connect能够捕获它,然后尝试   发送500错误页面。但是由于标头已经发送,   Node.js的setHeader引发了您看到的错误。

如果要实现for循环,可能会多次调用res.redirect()。

答案 1 :(得分:0)

也许,如果我理解正确,可以在mongo查询中将带有ArrayOfIds的ID列表查询到集合。 选中$in query of mongoDB。 仅供参考:在该字段上创建一些索引。