响应后Express JS中的错误处理

时间:2014-01-15 22:21:11

标签: javascript node.js error-handling express

我一直在尝试使用Express的不同错误处理技术。首先我只是使用process.on('uncaughtException')。我很快就知道这是不好的做法。之后,我尝试在节点js中使用新的“域”功能。我在域中包装了每个请求,但是,如果我发送响应然后在服务器上做更多工作(处理相同的请求),它将不会在响应发送后捕获这些函数中的错误。然后,我尝试使用next(err)转移到使用Express的内置错误处理。但是,我遇到了同样的情况。如果我发送响应然后函数在发送响应后出错,则不会调用我的错误处理程序。以下是一些代码示例。

async.waterfall([
        function(after)
        {
            hashPassword(password, after);
        },
        function(hash, after)
        {
            makeToken(hash, after);
        },
        function(hash, token, after)
        {
            insertUserInfo(email, username, hash, ip, token, after);
        },
        function(token, id, after)
        {
            req.session.attempts = 0;
            res.json({ err: 0, attempts: 0 }); //Response is sent
            after(null, token, id);
        },
        function(token, id, after)
        {
            sendEmail(token, email, renderEmail); //Errors not caught
            makeFolder(id, after); //Errors not caught
        }
    ], function(err) {

        if(err)
            next(err);

    }
);

从代码中可以看出,我正在注册一个新用户。现在,我可以等到我完成所有逻辑以发回响应,但我认为如果我在发送响应之后做了一些不那么重要的事情,它会使用户看起来更快。我愿意更改我的代码以执行所有发送响应的内容,但我想确保没有我尚未尝试过的解决方案。

1 个答案:

答案 0 :(得分:0)

和Express JS一样棒,它没有时间旅行功能,允许你取消发送请求:)这实际上是你问题的根源。如果您的回复必须显示结果,则必须等到所有相关操作完成。