Estoy seguro de que esto no es un problema, sino que no lo estoy usando de la manera correcta.
Quiero validar el cuerpo de la solicitud del usuario y, de acuerdo con la documentación, todo el trabajo se realiza en el archivo de ruta. Y dividí mi trabajo en rutas y archivos de controladores. Pasé un middleware de validación y necesita ser validado pero no lo es. Algo mal en el medio.
mi ruta es:
router.post( '/signup', userController.validateRequest, userController.hashPassword, userController.signup );En lugar de esto, si lo hiciera de esta manera:
router.post( '/signup', body('email').isEmail().withMessage('Please enter a valid email'), body('password') .equals('confirmPassword') .withMessage('Passwords do not match'), userController.hashPassword, userController.signup );Eso funcionará, pero esto hará que el código se ensucie si hay varias solicitudes de validación.
Solo quiero saber cuál es la forma correcta, si separo las solicitudes y el middleware de validación O tengo que pasar la validación en el archivo de ruta SOLAMENTE . Por favor, corrígeme si lo estoy haciendo de forma incorrecta.
Mi middleware de validación es:
exports.validateRequest = (req, res, next) => { if (req.body.email) { body('email').isEmail().withMessage('Please enter a valid email'); } if (req.body.password_confirm) { body('password') .equals('confirmPassword') .withMessage('Passwords do not match'); } next(); };Y mi controlador donde se muestran todos los mensajes de error
exports.signup = async (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } ............Bueno, prefiero Joi , el validador más poderoso.
async createAccountSchema(req, res, next) { // create schema object const schema = Joi.object({ email: Joi.string().email().required(), password: Joi.string() .min(8) .required(), confirmPassword: Joi.string() .valid(Joi.ref('password')) .required() .label('Passwords') .messages({ 'any.only': '{{#label}} are not the same' }), }) // schema options const options = { abortEarly: false, // include all errors allowUnknown: true, // ignore unknown props stripUnknown: true, // remove unknown props } // validate request body against schema const result = schema.validate(req.body, options) if (result.error) { return res.status(400).json(result.error.details) } else { result.value.email = result.value.email.trim().toLowerCase() result.value.password = result.value.password req.body = result.value next() } } Ese es un ejemplo para el validador. req.body al validador y hace el trabajo.
Después de validar, configura su req.body en el resultado de la validación y usa next()
app.use("/", createAccountSchema, userController.signup)