Я создал следующий Экспресс стек 4 промежуточного слоя:Express 4 промежуточное программное обеспечение, когда маршрут не найден (окончательный обработчик не вызывается): как его проверить?
const app = express();
const router = express.Router();
router.get('/test', testResponse);
app.use(checkAccessToken);
app.use(router);
app.use(sendResponse);
//Error Handling
app.use(function(err,req,res,next) {
// ... Do something here
});
function sendResponse(req, res) {
res.json({
data: res.locals.data,
meta: res.locals.meta
});
}
Если я позвоню сервер с маршрутом, который не существует (например, GET/кое-что) функция SendResponse только после того, как обработчик маршрутизатора называется и вызывающий получает стандартный ответ вместо обычного сообщения «Can not GET/something», исходящего из модуля finalhandler.
Я думал, что обработчик ошибок должен был быть вызван, но это не тот случай.
Есть ли способ заставить маршрутизатор испускать ошибку, если маршрут не найден или проверить стандартный ответный обработчик, если маршрут не был согласован?
Я знаю, что я могу добавить значение в res.locals для любого маршрута, который имеет соответствие, и проверить его в стандартном обработчике ответов, но я бы хотел использовать «правильный» способ сделать это, а не использовать обходной путь.
Является ли изменение 'app.use (SendResponse)' в 'app.use (функция (Req, Рез, следующий) {следующий (новый Error (404));});' решить вашу проблему? , –
Совсем нет, потому что в этом случае ошибка 404 возникает, даже когда маршрут найден –
Вы вызываете 'next()' в функции маршрутизатора для вызова 'sendResponse', правильно? –