javascript – 如何正确处理Express中的错误?

我开始与Express JS合作,遇到了一个问题。我似乎无法弄清处理错误的正确方法。

例如,我有一个Web服务API,用于提供一个名为“event”的对象。当用户提交未找到的事件ID时,我想返回一个简单的“无法找到事件”字符串。以下是我正在构建我的代码的方式:

app.get('/event/:id', function(req, res, next) {
    if (req.params.id != 1) {
        next(new Error('cannot find event ' + req.params.id));
    }

    req.send('event found!');
});

当我提交1以外的id时,Node会使用以下输出:

http.js:527
   throw new Error("Can't set headers after they are sent.");
         ^
Error: Can't set headers after they are sent.
    at ServerResponse.<anonymous> (http.js:527:11)
    at ServerResponse.setHeader (/usr/local/kayak/node_modules/express/node_modules/connect/lib/patch.js:62:20)
    at /usr/local/kayak/node_modules/express/node_modules/connect/lib/middleware/errorHandler.js:72:19
    at [object Object].<anonymous> (fs.js:107:5)
    at [object Object].emit (events.js:61:17)
    at afterRead (fs.js:878:12)
    at wrapper (fs.js:245:17)

通过使用node.js调试器可以看出,在调用next()之后,继续执行代码块,这意味着req.send(‘event found!’)尝试运行。我不想要这样做。

我发现唯一的解决方法是简单地抛出一个新的Error()而不是“next-ing”它,但这会导致默认的Express HTML错误页被生成。我想要比这更多的控制。

我花了时间阅读Express文档的error handling section,但是我无法理解。

你会想看看Express Error Handling.从那里:

app.param('userId', function(req, res, next, id) {
    User.get(id, function(err, user) {
        if (err) return next(err);
        if (!user) return next(new Error('failed to find user'));
        req.user = user;
        next();
    });
});

你缺少的甜点是接下来的回报(…)

http://stackoverflow.com/questions/7716691/how-to-properly-handle-errors-in-express

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:javascript – 如何正确处理Express中的错误?