Estoy escribiendo una función para validar los argumentos de entrada. Pero no estoy seguro de que sea la mejor práctica para usar.
Tengo una función que valida así,
const isValidStudyId = (id) => { if (validator.isUUID(id) === false || isValidArguments([id]) !== true) { console.log(`${id} is invalid Study Id`); return { valid: false, message: `${id} is invalid id!` }; } return true; }Y usa esto así,
const isValidId = utils.isValidStudyId(studyId) if (isValidId !== true) { res.status(400).send({ message: isValidId.message }); return; }Y no me gusta la forma en que verifica la validez como
if (isValidId !== true)Por aquí. Porque regresa a veces booleano, a veces un objeto. ¿Podría sugerir otras formas de hacerlo? No estoy muy familiarizado con javascript y quiero aprender más sobre cuál es la mejor práctica en este tipo de situación.
Cámbielo a validateStudyId en lugar de que devuelva un mensaje de por qué no es válido si no es válido, de lo contrario, devuelve un valor falso.
const validateStudyId = (id) => { if (validator.isUUID(id) === false || isValidArguments([id]) !== true) { const message = `${id} is invalid Study Id`; console.log(message); return { valid: false, message }; } // else undefined }y luego puede probarlo como si fuera booleano e incluso encadenar varias comprobaciones de una manera que se detenga en la primera respuesta veraz, como esta:
const o = validateStudyId(id) || validateOtherThing() || validateThirdThing(); if (o) { res.status(400).send(o); // no need to create a new object } Si se refiere únicamente a la estructura que debe usar, tal vez devolviendo algo como {valid: true} y verifique la propiedad válida, ya que la propiedad del mensaje solo se verifica cuando valid es false , no es necesario establecer uno cuando valid es true , a menos que quieras.
Otra opción sería usar algo como las funciones de devolución de llamada para estructurar su flujo de manera diferente.
// 'next' is a function that takes two arguments (error, message) const checkStudyID = (id, next) => { // '=== false' is somewhat redundant if these checks always return booleans if(!validator.isUUID(id) || !isValidArguments([id])) { console.log(`${id} is an invalid Study ID`); return next(true, `${id} is invalid id!`); } next(false); } // --- USAGE --- utils.checkStudyId(studyId, (err, msg) => { if (err) return res.status(400).send({message: msg}); });