javascript - res.local 通过 Express 传递数组
问题描述
我正在使用 Express 和 Node 在单个 router.get() 中通过多个数据库查询构建一个数组对象。
为此,我需要:(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) => {
这基本上有效,但你可能已经注意到我的问题......
- 我无法决定是否应该使用“req”或“res.locals”来存储这些数组?
- 该对象正在获取“checkBoosters.checkBoosters”类型的对象模式。我可以避免这种情况吗?
谢谢你尽你所能的帮助。
解决方案
- 在中间件之间传递数据时,普遍的共识似乎
res.locals
是这样做的首选方式,另请参见这个SO answer。 - 至于您的第二个问题,您获得
checkBoosters.checkBoosters
类型对象模式的主要原因是因为您使用req.checkBoosters = { checkBoosters }
while分配req.checkBoosters = checkBoosters
会给您想要的结果(不使用冗余属性构造一个新对象checkBoosters
)。
推荐阅读
- git - 如何在 jenkins 多分支脚本管道中获取最新的 git 提交作者姓名或消息并在分支条件下使用
- javascript - 将值分配给计算属性 vuejs
- r - 如何在 R 中整个 data.frame 列的函数之间使用?
- python - Ebay 令牌和 GetDealItems API 调用问题
- java - 如何从java中的数组列表生成二维码并存储到数据库?
- laravel - Laravel [ErrorException] hash_file():读取 8192 字节失败,errno=13 权限被拒绝,Windows 操作系统
- javascript - swiper.update() 滑块错误的分页点数
- python - 作为服务运行时未找到 ODBC Lib
- django - 如何为 django_filters DateRangeFilter 函数指定自定义选项?
- node.js - 如何根据 mongoose 中的数组更新多个字段?