Estoy usando express-validator para validar la entrada del usuario en la API mecanografiada. mi cadena de validación:
export const userValidator = [ body("email").isEmpty().withMessage("email is required"), body("email").isEmail().withMessage("email is not valid"), body("username") .isEmpty() .withMessage("first name has to be longer then 2 charecters"), body("username").isLength({ min: 2 }).withMessage("first name is required"), body("phoneNum").isNumeric().withMessage("enter a valid phone number"), body("password").isEmpty().withMessage("password is required"), body("password") .isLength({ min: 8 }) .withMessage("password must be at least 8 characters"), body("confiremdPassword").custom((value: string, { req }) => { if (value !== req.body.password) { throw new Error("password have to match!"); } else { return true; } }), ]; y estoy buscando errores en auth.ts :
const errors = validationResult(req); if (!errors.isEmpty()) { const error: ServerError = new Error("Validation failed"); error.status = 422; error.data = errors.array(); throw error; }pero el resultado de esto es muy raro porque obtengo una serie de todos los posibles errores sin razón...
[{ value: 'bro1@bro.com', msg: 'email is required', param: 'email', location: 'body' }, { value: 'brrrrrro', msg: 'el primer nombre debe ser más largo que 2 charecters', param: 'username', location: 'body' }, { value: undefined, msg: 'enter a valid phone number', param: 'phoneNum', location: 'body' }, { value: 'brorrrrrrrr' , msg: 'se requiere contraseña', param: 'contraseña', ubicación: 'cuerpo' } ] como puede ver, incluso me dice que el correo electrónico está vacío aunque me dice el valor.
Tienes que invertir tu lógica.
En su código, le está diciendo al validador expreso que el campo de correo electrónico DEBE estar vacío, de lo contrario, lo considerará como un error.
Simplemente agregue .not() antes del validador .isEmpty() .
body("email").not().isEmpty().withMessage("email is required")
Si su campo es obligatorio, también puede agregar .exists()