Node.js 当代码抛出错误时,节点本地服务器立即停止;
因此,在这段代码中,我试图使用Node.js 当代码抛出错误时,节点本地服务器立即停止;,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,因此,在这段代码中,我试图使用findOne从我的收藏夹文档中查找并删除一个特定的dishId。如果我发送了一个有效的dishId,代码运行正常,但是当我输入了一个错误的dishId时,代码会抛出错误,节点服务器将因此错误而停止 events.js:292 投掷者;//未处理的“错误”事件 ^ TypeError:无法读取null的属性“displays” 然后我必须再次执行npm start。那么,我应该如何解决这个问题呢?我不想让服务器停止。我希望它继续运行,以便我可以做进一步的请求。这是我
findOne
从我的收藏夹
文档中查找并删除一个特定的dishId
。如果我发送了一个有效的dishId
,代码运行正常,但是当我输入了一个错误的dishId
时,代码会抛出错误代码>,节点服务器将因此错误而停止
events.js:292
投掷者;//未处理的“错误”事件
^
TypeError:无法读取null的属性“displays”
然后我必须再次执行npm start
。那么,我应该如何解决这个问题呢?我不想让服务器停止。我希望它继续运行,以便我可以做进一步的请求。这是我的密码
favoriteRouter.route('/:dishId')
.delete(cors.corsWithOptions, authenticate.verifyUser, (req,res,next) => {
Favorites.findOne({user: req.user._id, dishes: req.params.dishId} ,(err, favdel) => {
if(err) {
throw err;
}
else {
favdel.dishes.pull({_id:req.params.dishId});
favdel.save();
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json(favdel);
}
})
});
错误很明显:您在未首先检查属性是否存在的情况下盲目访问该属性,因此:在尝试从中获取数据之前,请先检查favdel.disks是否存在。如果没有,请以确保发送正确HTTP错误代码的方式启动
...
if (!favdel || !favdel.dishes) {
// only you know which 4xx or even 5xx error this should be
return next(new Error("..."));
}
favdel.dishes.pull({_id:req.params.dishId});
favdel.save();
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json(favdel);
...
非常感谢。你的回答解决了我的问题。只需稍加更正,而不是(!favdel.disks)
我只需做(!favdel)
,因为这给了我一个错误无法读取null的属性“disks”
。如果(!favdel | | favdel.disks),你必须做
因为在访问其拉取功能之前,您仍然需要检查.disks
是否存在-如果不存在,您的服务器可能仍然会崩溃(例如,有一个db desync,db返回结果,只是没有预期的模式)。是的,真的!我总是忽略一些小问题。谢谢你,先生