Así que tengo algunas publicaciones de validación usando @hapi/joi 17.1.1 y ahí tengo dos campos: campo de texto e imagen. No estoy solicitando ninguno de los campos, pero todavía dice que la imagen es obligatoria.
validacion de publicaciones
module.exports.postsValidation = (data) => { const schema = Joi.object({ textfield: Joi.string().max(280), picture: Joi.string(), }); return schema.validate(data); };posts.js (donde estoy usando validación)
router.post("/create", authenticateToken, async (req, res) => { try { if ((req.body.textfield == "") & (req.body.picture == "")) { return res.status(400).json("Fill one of the fields"); } const { error } = postsValidation(req.body); if (error) return res.status(400).json(error.details[0].message); // Getting info for new post const newPost = new Post({ textfield: req.body.textfield, picture: req.body.picture, ownerId: req.user._id, }); // Saving new post await newPost.save(); res.json(newPost); } catch (error) { res.sendStatus(500); } });cuando cierro la sesión el error dice esto
[Error [ValidationError]: "picture" is not allowed to be empty] { _original: { textfield: 'sssss', picture: '' }, details: [ { message: '"picture" is not allowed to be empty', path: [Array], type: 'string.empty', context: [Object] } ] }¿Alguien puede decir qué está pasando?
Esto se debe a que está enviando la picture de utilería desde el lado FE y es una cadena vacía '' . Debe agregar un .allow('') su picture: Joi.string().allow('') si desea guardar una cadena vacía dentro de la base de datos o cambiar el lado FE para no enviar la picture en absoluto si la cadena está vacía.
En caso de que el valor sea nulo también
module.exports.postsValidation = (data) => { const schema = Joi.object({ textfield: Joi.string().max(280), picture: Joi.string().allow("", null), }); return schema.validate(data); };