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

200
Vistas
¿Cómo evita express-validator que ocurra esta llamada de función?

Esto está directamente fuera de la documentación express-validator . Noté que cuando estas funciones se pasan como middleware, incluyen argumentos y paréntesis, en cuyo caso deberían llamarse en tiempo de ejecución, ¿no?

 // ...rest of the initial code omitted for simplicity. const { body, validationResult } = require('express-validator'); app.post( '/user', // username must be an email body('username').isEmail(), // password must be at least 5 chars long body('password').isLength({ min: 5 }), (req, res) => { // Finds the validation errors in this request and wraps them in an object with handy functions const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } User.create({ username: req.body.username, password: req.body.password, }).then(user => res.json(user)); }, );

Salté al código fuente para tratar de averiguar cómo están impidiendo las llamadas a funciones, pero es un poco por encima de mi cabeza. La razón por la que quería aprender sobre esto era que estaba interesado en crear un middleware que funcionara de manera similar, donde los argumentos pudieran pasarse sin llamar a la función en tiempo de ejecución.

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

0

No voy a aplicar ingeniería inversa a un código específico, pero explicaré cómo lograr esto en general.

Consulte la documentación de middleware como referencia.

Un punto final es una función que toma dos argumentos. La petición y la respuesta. Por lo general, se denominan req y res .

El middleware toma tres argumentos. El tercero es el next , que se llama para pasar el control a la siguiente función.

 app.use(function (req, res, next) { console.log('Time:', Date.now()) next() })

Ahora, el middleware no tiene que pasar el control a la siguiente función. Solo puede responder.

 const middleware = (req, res, next) => { if (typeof req.body?.username === 'undefined') { // No username was provided res.send("Error: No username was provided"); } else { next(); } }

Ahora, es posible que desee que esto sea reutilizable para argumentos que no sean el nombre de username , de modo que pueda escribir una función de fábrica que devuelva la función de middleware.

 const createMiddleware = (propertyName) => { const middleware = (req, res, next) => { if (typeof req.body?.[propertyName] === 'undefined') { // No value was provided for the propertyName res.send(`Error: No ${propertyName} was provided`); } else { next(); } } return middleware; }

Y luego úsalo:

 app.use( createMiddleware('username') ); app.use( createMiddleware('password') );
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