【发布时间】:2014-02-04 15:14:33
【问题描述】:
我一直在尝试使用 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);
}
);
从代码中可以看出,我正在注册一个新用户。现在,我可以等到我完成所有逻辑后再发回响应,但我认为如果我在响应发送后执行一些不太重要的事情,它会使用户的请求看起来更快。我愿意更改我的代码以执行所有操作然后发送响应,但我想确保没有我尚未尝试过的解决方案。
【问题讨论】:
标签: javascript node.js error-handling express