Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

245
Visualizações
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 à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda