我开始使用Express JS并遇到了一个问题。 我似乎无法找到处理错误的正确方法。
例如,我有一个名为“event”的对象的Web服务API。 当用户提交未找到的事件ID时,我想返回一个简单的字符串“无法找到事件”。以下是我当前代码的结构:
当我提交除1以外的id时,Node会崩溃,并输出以下内容:
根据使用 node.js 调试器,我了解到在调用
我所找到的唯一解决方法是抛出一个
我花时间阅读了 Express 文档中的错误处理部分,但是无法理解。
例如,我有一个名为“event”的对象的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!');
});
当我提交除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!')
也会尝试运行。我不希望发生这种情况。我所找到的唯一解决方法是抛出一个
new Error()
而不是通过 next()。但这将导致生成默认的 Express HTML 错误页面,我需要更多控制权。我花时间阅读了 Express 文档中的错误处理部分,但是无法理解。