Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

237
Vistas
En el entorno de producción, el cliente no obtiene la respuesta que necesita

Escribí esta clase AppError que será suficiente para mi middleware de manejo de errores globales al enviar respuestas sobre errores operativos y de programación.

 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) } } module.exports = AppError;

Y aquí está mi middleware de manejo de errores global con todas las funciones necesarias para que funcione.

 const AppError = require('./AppError'); //global error handling middleware all errors go into it module.exports = (err, req, res, next)=>{ err.statusCode = err.statusCode || 500; err.status = err.status || 'error'; if(process.env.NODE_ENV === 'development'){ sendErrorDev(err, res) } else if(process.env.NODE_ENV === 'production'){ let error = {...err}; if(error.name === 'CastError') error = handleCastErrorDB(error); sendErrorProd(err, res) } }; const sendErrorDev = (err, res) => { res.status(err.statusCode).json({ status: err.status, error: err, message: err.message, stack: err.stack }); } const sendErrorProd = (err, res) => { // Operational, trusted error: send message to client if (err.isOperational){ res.status(err.statusCode).json({ status: err.status, message: err.message }); }else{ // Programming or other unknown error: don't send details to client //1_console err console.log('error: ', err); //2_send generic message to client res.status(500).json({ status: 'error', message: 'Something went very wrong!' }); }; }; const handleCastErrorDB = err => { const message = `Invalid ${err.path}: ${err.value}`; return new AppError(message, 400) };

Mi problema es que, en el entorno de producción, cuando intento obtener los datos a través de una solicitud GET, el cliente no recibe el error que debería recibir, lo estoy probando con el cartero. Elaborando más, para probar lo que está obteniendo el cliente, estoy tratando de obtener los datos con la identificación no válida ...

 127.0.0.1:3000/api/v1/tours/wwwwwwwwwwwwwwwwwww

Ese es el error del cliente y, por lo tanto, deberían obtener la respuesta establecida en handleCastErrorDB con un código de estado 400, pero en cambio, veo un código de estado 500 con un mensaje.

 "status": "error", "message": "Something went very wrong!"

Esa es la respuesta que obtendría el cliente si el error no es operativo. Ver en la función sendErrorProd() .

En el modo de desarrollo, obtengo lo que quiero, pero lo guardo aquí.

Estoy en modo de aprendizaje en node.js y he probado todo en mi conocimiento.

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda