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

198
Vistas
Matriz de funciones con argumentos adicionales en el middleware del enrutador express
const cb0 = function (data, req, res, next) { console.log('CB0') next() } const cb1 = function (data, req, res, next) { console.log('CB1') next() } app.get('/example/d', [cb0, cb1], (req, res, next) => { console.log('the response will be sent by the next function ...') next() }, (req, res) => { res.send('Hello from D!') })

Desde el código anterior, paso una serie de funciones [cb0, cb1] y cada función requiere algún atributo de data de tipo any y parámetros adicionales como req , res y next .

Anteriormente, intenté pasar el atributo de datos como el siguiente formato usando el concepto de bind . app.get('/example/d', [cb0.bind(data), cb1.bind(data)], (req, res, next)

Pero si uso el concepto de bind , ¿cómo pasar los otros atributos requeridos ( req , res y next )? ¿Hay alguna otra forma de pasar todos los parámetros, incluidos data sin enlace? o tenemos alguna limitación en el uso de la matriz de funciones en el expreso?

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

0

Primero, usó bind incorrectamente (por cómo se escriben sus funciones): el primer argumento para enlazar es el valor que se usará como this al llamar a la función; son solo los argumentos posteriores los que definen los argumentos para dar la función cuando se llama. Entonces querrás cb0.bind(null, data) en lugar de cb0.bind(data) .

Pero si uso el concepto de bind , ¿cómo pasar los otros atributos requeridos ( req , res y next )?

(Son argumentos, no atributos). Express hace eso cuando llama a su función. Los argumentos seguirán los argumentos que ha "incrustado" en sus funciones a través de bind . Sus funciones ya están configuradas correctamente para manejar ese pedido ( data , req , res , next ), por lo que con el cambio, debería estar listo para comenzar.

Asi que:

 app.get('/example/d', [cb0.bind(null, data), cb1.bind(null, data)], (req, res, next) => { // ...

Solo para mayor claridad, aquí hay un ejemplo de una función con datos vinculados a través de bind que se llama con más argumentos:

 function example(data, other) { console.log(`data = ${JSON.stringify(data)}, other = ${JSON.stringify(other)}`); } const ex = example.bind(null, "baked in arg"); // Emulating Express calling the middleware: ex("passed arg");


Nota al margen: no tiene que poner sus funciones de middleware en una matriz, express está feliz con ellas como argumentos discretos en su lugar:

 app.get('/example/d', cb0.bind(null, data), cb1.bind(null, data), (req, res, next) => { // ...

De cualquier manera está bien.

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