Я начинаю работать с Express JS и столкнулся с проблемой.Кажется, я не могу найти правильный способ обработки ошибок.
Например, у меня есть API веб-сервисов, который обслуживает объект, называемый «событие».Я хотел бы вернуть простую строку «not find event», когда пользователь отправляет идентификатор события, который не найден.Вот как я сейчас структурирую свой код:
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, но я не мог понять это.