Agregué un controlador de error global rápido en las últimas líneas de app.js, sin embargo, una excepción lanzada en un controlador aún bloqueó la aplicación.
identidad.controlador.js
const createError = require('http-errors'); exports.identifyUser = async (req, res) => { throw new createError(404, 'Test'); }aplicación.js
// Configure routes routes.register(app); app.use(function(err, req, res, next) { res.status(err.status || 500).json(response.error(err.status || 500)); }); module.exports = app; Cuando se llamó a la identifyUser del usuario, espero una respuesta de error 500 de express. Sin embargo, no se detectó una excepción y eliminó mi aplicación.
NotFoundError: Test at exports.identifyUser (C:\Users\......\src\api\controllers\identity.controller.js:9:11) at Layer.handle [as handle_request] (C:\Users\......\node_modules\express\lib\router\layer.js:95:5) at next (C:\Users\......\node_modules\express\lib\router\route.js:144:13) at C:\Users\......\src\api\middlewares\authUser.js:30:16 at C:\Users\......\node_modules\jsonwebtoken\verify.js:223:12 at getSecret (C:\Users\......\node_modules\jsonwebtoken\verify.js:90:14) at module.exports [as verify] (C:\Users\......\node_modules\jsonwebtoken\verify.js:94:10) at C:\Users\......\src\api\middlewares\authUser.js:19:16 at Layer.handle [as handle_request] (C:\Users\......\node_modules\express\lib\router\layer.js:95:5) at next (C:\Users\......\node_modules\express\lib\router\route.js:144:13) at Route.dispatch (C:\Users\......\node_modules\express\lib\router\route.js:114:3) at Layer.handle [as handle_request] (C:\Users\......\node_modules\express\lib\router\layer.js:95:5) at C:\Users\......\node_modules\express\lib\router\index.js:284:15 at Function.process_params (C:\Users\......\node_modules\express\lib\router\index.js:346:12) at next (C:\Users\......\node_modules\express\lib\router\index.js:280:10) at Function.handle (C:\Users\......\node_modules\express\lib\router\index.js:175:3) at router (C:\Users\......\node_modules\express\lib\router\index.js:47:12) at Layer.handle [as handle_request] (C:\Users\......\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (C:\Users\......\node_modules\express\lib\router\index.js:328:13) at C:\Users\......\node_modules\express\lib\router\index.js:286:9 at Function.process_params (C:\Users\......\node_modules\express\lib\router\index.js:346:12) at next (C:\Users\......\node_modules\express\lib\router\index.js:280:10) Node.js v18.7.0 [nodemon] app crashed - waiting for file changes before starting...Estoy ejecutando Node.js v18.7.0 con Express 4.18.1 en Windows 11.
De la documentación Express:
Para los errores devueltos por funciones asincrónicas invocadas por controladores de ruta y middleware, debe pasarlos a la función next(), donde Express los detectará y procesará.
Intenta reemplazar
exports.identifyUser = async (req, res) => { throw new createError(404, 'Test'); }por
exports.identifyUser = async (req, res, next) => { next(new createError(404, 'Test')); }No creo que necesite errores http siempre que esté usando express, puede lanzar un nuevo error.
Prueba esto:
exports.identifyUser = async (request, response, next) => { try { throw new Error (404, 'Test')); } catch { next (Error); } }El controlador de errores global de Express no detectará ningún error en su aplicación, aún debe hacerlo usted mismo con un bloque try/catch y luego llamar a la next función con su error como parámetro.
const createError = require('http-errors'); exports.identifyUser = async (req, res, next) => { try { throw new createError(404, 'Test'); } catch(err) { next(err); } }