如何使用NodeJ停止或退出错误

时间:2015-06-19 08:38:17

标签: node.js

我试着理解如何在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;
}

1 个答案:

答案 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()操作,则必须将该代码放在回调函数中。