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" }) } }) 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.
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 .
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.