Estoy tratando de manejar errores con express con middleware de error. Este es mi índice:
const functions = require("firebase-functions"); const express = require("express"); const cors = require("cors"); require("dotenv").config(); const methodOverride = require('method-override') const {logErrors, errorHandler,boomErrorHandler, error404Handler } = require("./src/middlewares/error.handler") //modulos personalizados const { productsRoutes } = require("./src/products/products.routes"); const userRoutes = require("./src/users/user.routes"); const UserServices = require("./src/users/user.services") //nombre const userService = new UserServices const app = express(); app.use(express.urlencoded({ extended: true })); app.use(express.json()); app.use(cors({ origin: true })); app.use(methodOverride()); app.use(logErrors); app.use(boomErrorHandler); app.use(errorHandler); // app.use(error404Handler); exports.setCustomerClaim = functions.auth .user() .onCreate(userService.customerClaimServ) productsRoutes(app); exports.api = functions.https.onRequest(app);Como puede ver, tengo el middleware logErrors.
Este es mi controlador simple que arroja las cosas bien, pero cuando hago un next() dentro de catch() no entra en el middleware de error.
este es mi controlador:
async function getAll(req, res, next) { try { const products = await productServices.getAllSer(); console.log("Aca esta tu error"); res.json(products); } catch (error) { next(); } }este es mi software intermedio:
/* eslint-disable @typescript-eslint/no-var-requires */ const boom = require("@hapi/boom"); function logErrors(err, req, res, next) { console.error(err); next(err); } function errorHandler(err, req, res, next) { if (err) { res.status(409).json({ message: err.message, stack: err.stack, }); } else { next(err); } } function boomErrorHandler(err, req, res, next) { if (err.isBoom) { const {output} = err; res.status(output.statusCode).json(output.payload); } next(err); } function error404Handler (req, res) { res.status(404) res.send ({ message: boom.notFound('el recurso que busca no existe') }) } module.exports= { logErrors, errorHandler, boomErrorHandler, error404Handler };El problema es que no está entrando en el middleware de error porque cualquier cosa antes de next() funciona bien.
Apreciaría cualquier ayuda. ¡Gracias por adelantado!
Su problema está en el controlador, use así return next(error); :
async function getAll(req, res, next) { try { const products = await productServices.getAllSer(); console.log("Aca esta tu error"); res.json(products); } catch (error) { return next(error); } }