【发布时间】:2011-12-04 17:25:32
【问题描述】:
我开始使用 Express JS 并遇到了问题。我似乎无法找出处理错误的正确方法。
例如,我有一个 Web 服务 API,它为一个名为“事件”的对象提供服务。当用户提交未找到的事件 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!');
});
当我提交 id 不是 1 时,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!') 尝试运行。我不希望这种情况发生。
我发现的唯一解决方法是简单地抛出 new Error() 而不是“下一步”它,但这会导致生成默认的 Express HTML 错误页面。我想要更多的控制权。
我花时间阅读了 Express 文档中的 error handling section,但我无法理解它。
【问题讨论】:
标签: javascript node.js middleware express