Может быть несколько проблем:
В конце у вас есть обработчик 404
(мы все так и делаем) и просто упустили из виду.Например:
app.get('/path', (req, res, next) => {
res.json({ greet: "Welcome!" })
next() // <-- calling next middleware
})
// set up a 404 handler at the end
app.use((req, res) => {
res.status(404).send('Opps! Not Found');
})
Это может привести к ошибке Error: Can't set headers after they are sent.
Поскольку ваш обработчик 404 отправляет ответ.
Или Вы наткнулись на Неизвестная функция (или, прямо скажем, один из ваших маршрутов не работает должным образом, возможно, ошибка проектирования).Рассмотрим следующий маршрут:
app.get('/path/:id', (req, res, next) => {
res.json({ message: "Welcome!" });
next() // <-- calling next middleware
})
app.get('/path/test', (req, res, next) => {
res.json({ message: "Welcome!" });
})
Вызов next
на маршруте /path/:id
может привести к ошибке, если ваш путь запроса /path/test
(Это в целом предполагает лучшую реализацию маршрутизации)
Простой способ понять middleware
и next
связан с тем, как работает switch
оператор:
function test(x) {
switch (x) {
case 'Oranges':
console.log('Orange juice');
break;
case 'Mangoes': // fall through
case 'Papayas':
console.log('Pickles');
break;
case 'Banana':
console.log('Milkshake');
// forgot the break
case 'Apple':
console.log('Apple Pie')
break;
default:
console.log('Sorry, no ' + x + '.');
}
}
test('Banana')
Вызов next
похож на fall through
оператора switch
, также выполните следующий случай.
Поэтому, когда вы вызываете next
на одном маршруте, и request
продолжает совпадать с другим route
(непреднамеренное совпадение), когда вы отправляете ответ, вы обнаруживаете, что бьете по лицу с ошибкой.