Actualmente tengo un código html como este:
<!DOCTYPE html> <html> <body> <p>Select an element</p> <form action="/action"> <label for="fruit">Choose a fruit:</label> <select name="fruit" id="fruit"> <option value="Banana">Banana</option> <option value="Apple">Apple</option> <option value="Orange">Orange</option> </select> <br><br> <input type="submit" value="Submit"> </form> </body> </html>Y en el lado del servidor, quiero verificar con el validador expreso si la fruta en la solicitud de publicación es un plátano, una manzana o una naranja. Este es el código que tengo hasta ahora:
const{body} = require('express-validator'); const VALIDATORS = { Fruit: [ body('fruit') .exists() .withMessage('Fruit is Requiered') .isString() .withMessage('Fruit must be a String') ] } module.exports = VALIDATORS;¿Cómo verifico si la cadena enviada por la solicitud POST es una de las frutas requeridas?
Dado que express-validator se basa en validator.js , ya debería estar disponible un método que podría usar para este caso. No es necesario un método de validación personalizado.
Desde los documentos de validator.js , verifique si la cadena está en una matriz de valores permitidos:
isIn(str, values)Puede usar esto en la API de cadena de validación, en su caso como:
body('fruit') .exists() .withMessage('Fruit is Requiered') .isString() .withMessage('Fruit must be a String') .isIn(['Banana', 'Apple', 'Orange']) .withMessage('Fruit does contain invalid value') Este método también se incluye en los documentos express-validator , aquí https://express-validator.github.io/docs/validation-chain-api.html#not (se usa en el ejemplo para el método not )
Puede hacerlo a través de la función .custom;
Por ejemplo:
body('fruit').custom((value, {req}) => { const fruits = ['Orange', 'Banana', 'Apple']; if (!fruits.includes(value)) { throw new Error('Unknown fruit type.'); } return true; })