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

112
Vistas
Declaración condicional Express js para elegir entre módulos de middleware

Tengo un punto final en express.js que elige condicionalmente entre devoluciones de llamada de middlware para ejecutar:

 const middleware1 = require('./m1') const middleware2 = require('./m2') app.get('/call', async (req, res) => { if (req.code === 'something') { middleware1.call } else if (req.code === 'something else') { middleware2.call } else { res.send({ done: "done" }) } })

middleware1

 module.exports = { call : async function(req, res, next) { // does some async stuff with req // sends it as response res.send({data: "data"}) } }

Idea similar para middleware2 . El problema es que una vez que se llama middleware1 o middleware2`, la solicitud no se cierra. Sin embargo, si, como prueba, elimino la declaración condicional y llamo a un middleware inmediatamente así:

 app.get('/call', middleware1.call);

Esto funciona de inmediato, ¿por qué es eso? Debo estar haciendo algo mal.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Intente agregar next() al final de su middleware. Para que la solicitud pase a la siguiente función en la pila. Más sobre middleware aquí Escritura de middleware para uso en aplicaciones Express .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Es posible que deba hacer esto:

 const middleware2 = require('./m2') app.get('/call', async (req, res, next) => { if (req.code === 'something') { middleware1.execute(req, res, next); // you were not calling the method } else if (req.code === 'something else') { middleware2.execute(req, res, next); } else { res.send({ done: "done" }) } })
 module.exports = { // call is the reserved keyword use something different execute : async function(req, res, next) { // does some async stuff with req // sends it as response res.send({data: "data"}) } }

res.send debería devolver la respuesta, sin embargo, en su caso, parece que la llamada a cualquier middleware no está ocurriendo. Internamente, res.send llama al siguiente para devolver la respuesta y debería enviarla.

about 4 years ago · Juan Pablo Isaza Denunciar
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