¿Hay alguna forma de agregar middleware o app.use() para detectar todos los posibles errores?
He probado algunos enfoques globales de intento y captura, pero parece muy frágil.
Mi enfoque sería como a continuación
Coloque debajo del código en
servidor.js o index.js
class AppError extends Error { constructor(message, statusCode) { super(message); this.statusCode = statusCode; this.status = `${statusCode}`.startsWith('4') ? 'fail' : 'error'; this.isOperational = true; Error.captureStackTrace(this, this.constructor); } } app.all('*', (req, res, next) => { next(new AppError(`Can't find ${req.originalUrl} on this server!`, 404)); }); app.use((err, req, res, next) => { err.statusCode = err.statusCode || 500; err.status = err.status || 'error'; res.status(err.statusCode).json({ status: err.status, message: err.message }); }); app.use((req, res, next) => { console.log("Middleware 1 called.") console.log(req.path) next() // calling next middleware function or handler }) app.get('/', (req, res) => { console.log("Route handler called.") res.send("Hello world!") // response sent back – no more middleware called })Puedes manejar tus errores así:
res.status(500).send({ msg: 'Wrong email' })Y puede cambiar el código de estado para enviar diferentes tipos de errores o respuestas:
res.status(404).send({ msg: 'Not found' }) res.status(200).send({ msg: 'successful' })