В приложении express ниже:
Выполнение POST для / pu sh с недопустимыми данными json приведет к отправке ошибки HTTP 400 обратно в client
Выполнение POST с действительными json данными, но для неизвестного маршрута приведет к отправке клиенту ошибки HTTP 404
Выполнение POST с недопустимыми json данными для неизвестного маршрута приведет к отправке клиенту ошибки HTTP 400.
Чего я хотел бы достичь, заключается в том, что в третьем сценарии также будет отправлено 404. Другими словами, в случае, если маршрут неизвестен, я хочу, чтобы его перехватил app.post ('*', (req, res, next)), который выбрасывает 404, а не промежуточное ПО generi c обработчик ошибок, который выдает ошибку 400 json SyntaxError
Каким-либо способом добиться этого?
const express = require('express');
const { handleError, ErrorHandler } = require('./helpers/error');
const app = express();
app.use(express.json());
app.use(express.urlencoded({extended: true}));
app.get('/', function(req, res){
res.send('Hello World');
});
app.post('/', function(req, res){
console.log(req.body.data);
res.sendStatus(200);
});
app.post('/push', function(req, res){
console.log('push API');
res.sendStatus(200);
});
app.post('*',(req, res, next) => {
console.log('Unknown route');
throw new ErrorHandler(404, 'API endpoint does not exist.');
});
app.use((err, req, res, next) => {
console.log('Middleware error handling');
handleError(err, res);
});
app.listen(3000, function(){
console.log('Server started on port 3000')
});
error. js content:
class ErrorHandler extends Error {
constructor(statusCode, message) {
super();
this.statusCode = statusCode;
this.message = message;
}
}
const handleError = (err, res) => {
const { statusCode, message } = err;
res.status(statusCode).json({
status: "error",
statusCode,
message
});
};
module.exports = {
ErrorHandler,
handleError
}