我正在使用Express&;节点。
为此,我需要:(1)查询集合,(2)将结果附加到对象,(3)使用next()通过中间件传递对象,(4)多次重复,(5)以附加了多个数组的漂亮对象结束。
下面是我使用的模式(只是一个例子):
}, (req, res, next) => {
let { checkBoosters } = req;
let boosterNo = [];
let boosterMoGo = [];
if(!checkBoosters.checkBoosters.length){
return next()
}
//re-check boosters (from sentry)
for(let i=0; i<checkBoosters.checkBoosters.length; i++){
Phases.find({name: "Booster", team_oid: checkBoosters.checkBoosters[i]._id, weeks: {$gt: 0}}, (err, doc) => {
if(!doc.length){
boosterNo.push(doc[0])
}
if(doc.length){
boosterMoGo.push(doc[0])
}
if(checkBoosters.checkBoosters.length == i+1){
res.locals.boosterMoGo = { boosterMoGo }
req.boosterNo = { boosterNo }
return next()
}
})
}
}, (req, res, next) => {
这基本管用,但你可能已经注意到我的问题了……
谢谢你能提供的任何帮助。
当在中间件之间传递数据时,普遍的共识似乎是res.locals
是这样做的首选方式,请参见此SO答案。关于您的第二个问题,得到checkBoosters
类型对象模式的主要原因是,使用req.checkBoosters={checkBoosters}
进行分配,而req.checkBoosters=checkBoosters
将给出您想要的结果(而不需要构造具有冗余属性checkBoosters
的新对象)。