我有两个明确的路由处理程序,一个是参数回调中间件,它在匹配parameter时执行,第二个也使用上述参数在DELETE方法上执行。
代码如下:
const findPlan = async function (req, res, next) {
try {
let projection = {};
let plan = await AppPlans
.findOne({_id: req.params.appPlanID, active: true})
.select(projection)
.exec();
if (!plan) {
let err = new Error("No plan found");
err.status = 404;
return next(err);
}
req.plan = plan;
return next();
} catch (err) {
return next(err);
}
};
const deletePlan = async function (req, res, next) {
try {
req.plan.active = false;
await req.plan.save();
return res.sendStatus(202);
} catch (err) {
return next(err);
}
};
以上内容在req.plan.active = false
部分给了我警告:
分配给该原语的值将丢失
以前,findPlan
函数的Mongoose查询是通过回调定义的,但未显示警告,
const findPlan = function (req, res, next) {
try {
let projection = {};
AppPlans
.findOne({_id: req.params.appPlanID, active: true})
.select(projection)
.exec(function (err, plan) {
if (err) {
return next(err);
}
else if(!plan){
let err = new Error("No plan found");
err.status = 404;
return next(err);
}
req.plan = plan;
return next();
});
} catch (err) {
return next(err);
}
};
是不是有什么不对的地方,例如边缘情况?或者只是假阳性,因为我看到此警告的其他情况不正确。
答案 0 :(得分:0)
在Express.js中的中间件之间传递值时,应使用res.locals
来存储值,因为这是official documented的方法。这可能是发出警告的原因。
const findPlan = async function (req, res, next) {
try {
let projection = {};
let plan = await AppPlans
.findOne({_id: req.params.appPlanID, active: true})
.select(projection)
.exec();
if (!plan) {
let err = new Error("No plan found");
err.status = 404;
return next(err);
}
res.locals.plan = plan;
return next();
} catch (err) {
return next(err);
}
};
const deletePlan = async function (req, res, next) {
try {
res.locals.plan.active = false;
await res.locals.plan.save();
return res.sendStatus(202);
} catch (err) {
return next(err);
}
};