Я пытаюсь реализовать собственный обработчик ошибок в моем приложении Express. Я думаю, что я правильно следую за документами, но я, должно быть, делаю что-то не так, потому что мое приложение возвращает HTML каждый раз, когда конечная точка выдает ошибку.
Документы: https://expressjs.com/en/guide/error-handling.html
Практически все подобные проблемы, которые я обнаружил здесь и на GitHub, были решены путем размещения промежуточного программного обеспечения для обработки ошибок и самого конца стека ... но я уже сделал это, и до сих пор не повезло.
Вот мой код:
// сервер. js
import express from 'express';
import body from 'body-parser';
import cookies from 'cookie-parser';
import {
provideLogger,
responseStructure,
errorHandler, // => confirmed is importing the right function
} from '@middleware';
import routes from '@routes';
import { Logger } from '@utils';
import config from '@config';
const logger = new Logger().context('startup');
async function onAppReady(...args) {
logger.success(`API listening on port ${config.port}`);
}
express()
.use(body.json())
.use(cookies())
.use(provideLogger)
.use(responseStructure)
.use(routes)
.use(errorHandler) // => applied after routes
.listen(config.port, onAppReady);
// маршруты. js
import { Router } from 'express';
import myRoute from './myRoute';
const router = new Router();
router.use('/route', myRoute);
export default router;
// myRoute . js
import { Router } from 'express';
import endpoint from './endpoint';
const myRoute = new Router();
myRoute.post('/:objectId/', endpoint);
export default myRoute;
// конечная точка
export default function endpoint(req, res, next) {
console.log('I am an endpoint, time to trigger an error');
next({ status: 404, message: 'Success not found :(' });
}
// middleware
export function errorHandler(
{
error = {},
message = 'An error occurred.',
status = 500,
} = {},
req,
res,
next,
) {
console.log('I am handling the error');
res.status(status).send({ error: true });
}
Когда я отправляю запрос конечной точке, он печатает журнал из моей конечной точки затем возвращает файл HTML с данными, которые я передал в next
как тело HTML. Журнал от моего errorHandler никогда не печатается.
Я полил документы, и из того, что я могу сказать, я все делаю правильно. Я должен что-то упустить, но что ?? Почему мой обработчик ошибок никогда не вызывается ??