我试着理解如何在Nodejs路由中停止或退出错误。 在下面的代码中,我检查是否发送了标头UID以及是否还发送了fiels组。
问题是nodejs继续执行其余代码,即使我使用res.end () + return;
我希望Node Js在显示错误时停止所有内容。也许是因为我对Node Js的了解不多,我自己也很不好意思,我不得不另外工作。你能解释一下我给我一个如何做的例子吗?
var uid;
var group;
if (typeof req.headers['uid'] == 'undefined' || req.headers['uid'] == '') {
res.status(404);
res.json('user_id not set');
res.end();
return;
}
else
{
uid = req.headers['uid'];
User.find({_id:uid}).exec(function(err, data)
{
if(err){
res.status(404);
res.json('user not found');
res.end();
return;
}
});
}
if (typeof req.body.group == 'undefined' || req.body.group == '') {
res.status(500);
res.json('group not defined');
res.end();
return;
}
else
{
group = req.body.group;
}
答案 0 :(得分:1)
目前还不清楚你的意思是什么?节点js停止一切"。如果要停止整个nodejs进程,可以使用process.exit()
。
如果您在执行错误后尝试保留一些代码并且在异步回调中发生错误,那么您就无法做到这一点。其他代码已经执行。
如果要序列化异步操作,以便在决定是否启动下一个操作之前完成一个异步操作,那么您将需要以不同的方式编写代码。您需要在第一个异步操作的完成回调中执行第二个代码块。
您可能不理解的代码的一个方面是该块是异步的:
User.find({_id:uid}).exec(function(err, data)
{
if(err){
res.status(404);
res.json('user not found');
res.end();
return;
}
});
您传递给.exec()
的回调有时会在稍后调用。与此同时,你的其他JS已经执行了。此外,当您从该外部函数中没有return
的回调中执行return
时,它只会从该回调函数返回到.exec()
的内容中。它会停止执行任何回调,但对外部函数完全没有影响,因为该外部函数。
因此,如果您希望在执行该函数中的其余代码之前完成.find()
操作,则必须将该代码放在回调函数中。