I have an error handling middleware which handles the errors in my express app like this :
export const errorMiddleware = (app: Application): void => {
// If the route is not correct
app.use(((req, res, next): void => {
const error: any = new Error("Route not found");
error.status = 404;
next(error);
logger.error(`${error.status} ${error.message}`);
}) as RequestHandler);
// If any operation fail and throw error with next will come here
app.use(((error, req, res, next): void => {
logger.error(`${error.status} ${error.message}`);
res.status(error.status || 500).json({
error: {
message: error.message,
},
status: error.status || 500,
});
}) as RequestHandler);
};
The first app.use
passes an error object to the next middleware which gets that error object in the first parameter :
app.use(((error, req, res, next): void => {
Now I've declared a RequestHandler
type for it and it gives error because of that custom first parameter it gets which is error .
How can I use the RequestHandler prop with one extra prop type added to it so I can fix this error ?
CodePudding user response:
You can not introduce new parameters in a callback function like that, it just accepts fixed parameters and in that order. So your error
parameter will contain req
!
To pass data from one middleware to the next middlewares, use res.locals
.
Take a look at http://expressjs.com/en/api.html#res.locals
You should set it in your first middleware like this:
res.locals.error = 'Sorry'
And you can use it in the next middlewares like this:
if (res.locals.err) {...}
It's persisted in the request's lifecycle.