【发布时间】:2019-10-26 19:41:54
【问题描述】:
我在 express 中有两个路由处理程序,一个是参数回调中间件,在匹配 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);
}
};
有什么问题吗,比如边缘情况,还是只是误报,因为我看到此警告的其他情况不正确。
【问题讨论】:
-
stackoverflow.com/questions/37923424/… 看看这个可能有帮助!
-
@VenkatShukla 是的,我之前确实看到过,但是考虑到错误的显示方式,因为他们将其视为错误,所以我期望在我的情况下是相反的,因为使用回调我想我有一些“包装”?在使用 async/await 时,“包装器”已被删除,因此它应该是带有警告的回调,而另一个带有 async/await 则没有它。
标签: node.js express intellij-idea mongoose async-await