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返回结果,只是没有预期的模式)。是的,真的!我总是忽略一些小问题。谢谢你,先生