Tengo mis nombres de campo en una matriz como esta:
const baseFields = [ 'employeeNumber', 'firstName', 'lastName', 'trEmail', 'position' ];Esos son los campos de entrada que solo tengo que preocuparme por validar.
En el cuerpo de la solicitud, recibo una matriz de objetos. Ejemplo:
{employeeNumber: 12343, firstName: Will, lastName: Smith, trEmail: smith@will.com, position: Actor, salary: low }, {employeeNumber: 12344, firstName: Chris, lastName: Rock, trEmail: rock@chris.com, position: stuntman, salary: '' } Quiero validar esta matriz solo con los campos de preocupación en la matriz baseFields .
Este es mi código de validación actual. Descubrí que puedo usar comodines para validar matrices.
const existsOptions = { checkNull: true, checkFalsy: true }; const postRequiredFields = () => { const validators = []; const validator = body('*.*') .exists(existsOptions) .bail() .isString(); validators.push(validator); return validators; }; El uso de este const validator = body('*.*') verificará todos los campos en la matriz de objetos en el cuerpo. Ya que puedo recibir este mensaje:
{ value: '', msg: 'Invalid value', param: '[1].salary', location: 'body' } Verá, el campo de salary está siendo revisado. Devolvió un valor no válido porque el segundo índice de la matriz tiene el salario establecido en '' o vacío. Pero nuevamente, el campo de salario no es uno de los campos que necesito validar.
Así que probé algo como este body('baseFields*.*') para verificar toda la matriz de objetos, pero solo los campos de interés, pero no funcionará. No pude encontrar el patrón comodín correcto para mi escenario en línea. La documentación también dice muy poco.
para verificar un objeto en una matriz, use: *.key
y luego puede hacer un bucle de sus claves y agregarlas dinámicamente:
const postRequiredFields = () => { const validators = []; baseFields.map((key) => { const validator = body(`*.${key}`) .exists(existsOptions) .bail() .isString(); validators.push(validator); }); return validators; };