我有一个带有多个值的数组,需要将这些值用作查询集合的查询。我不确定使用一种方法执行此操作的方法。例如:
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循环执行此操作似乎会产生设置标头错误。有什么想法吗?
答案 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。 仅供参考:在该字段上创建一些索引。