Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

243
Views
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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!