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

191
Views
Express middleware para cambiar condicionalmente el resultado de la respuesta

Lo que quiero lograr es cuando un controlador expreso falla al lanzar una excepción no controlada o devolver una respuesta vacía como undefined o [] , quiero que el controlador devuelva una respuesta simulada predefinida en lugar de fallar. Esto significa que mi servidor nunca falla, ya que devuelve los datos reales normales o los datos simulados predefinidos. Por supuesto, solo activaré esto en el entorno de desarrollo y nunca en producción.

Creo que un middleware es ideal porque no quiero contaminar la lógica de todos los controladores al inyectar la verificación de respuesta.

¿Es esto posible con un middleware en express? Si no, ¿cuál es una forma más limpia de lograr esto?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El valor de retorno de un controlador de middleware es irrelevante, porque un controlador de middleware es asíncrono por naturaleza. Hace una de tres cosas:

  • Completa la respuesta llamando a res.end(...) o similar.
  • Informa de un error llamando a next(err) .
  • Delega la decisión al siguiente middleware llamando a next() .

Los errores se pueden capturar con un middleware de manejo de errores adicional, y las excepciones se pueden convertir en errores como se explica en [ExpressJs]: El controlador de errores personalizado no detecta excepciones .

Sin embargo, no puede cambiar una respuesta después de que se haya enviado. Además, escribes

un controlador express falla... al... devolver una respuesta vacía

pero una respuesta vacía no es un fracaso. Si desea tratar las respuestas vacías como fallas, pero solo en producción, le sugiero que las maneje como errores especiales. En lugar de responder con res.json([]) , por ejemplo, escribe next({emptyResponse: []}) y tiene un middleware especial de manejo de errores en desarrollo solo para manejar estos:

 app.use(function(err, req, res, next) { if (err.emptyResponse) { console.error(err.emptyResponse); res.end("Mock response"); } else next(err); // delegate to the standard error handler });

Tal vez hay una idea errónea de lo que es una respuesta. El servidor transmite la respuesta al cliente, solo el cliente puede "obtener" la respuesta en este sentido. Las respuestas no se pueden pasar entre middlewares.

over 4 years ago · Santiago Trujillo Report
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!