我有一个模式joi对象:
const commonFields = {
id: joi.string().required(),
name: joi.string().required().min(5).max(50),
nif: joi.string().length(9).required(),
diet: joi.bool().required().strict(),
vegetarian: joi.bool().required().strict(),
};
const aluno = joi.object({
...commonFields,
num: joi
.string()
.required()
.regex(/^\d{1,4}\/\d{2}$/),
regime: joi.string().required().valid("externo", "interno"),
});
(...)
当我发出PUT请求来更新用户时,我想忽略字段"id",但当我发出POST请求时,我想使它成为必需字段。
我尝试了以下方法:
在模式中,我向字段"id"添加了alter():
id: joi.string().alter({
post: (schema) => schema.required(),
put: (schema) => schema.forbidden(),
}),
在我的职责中我这样做:
async function updateUser(req, res, type, db) {
try {
const { error } = requestValidation[type].validate(req.body, {
context: { method: req.method }
});
if (error) {
return res.status(400).send({ error: error.message });
}
const id = req.params.id;
const { name, nif, vegetarian, diet } = req.body;
(..)
但是当我在PUT端点中调用这个函数来更新一个用户并将字段id添加到请求体中时,它并没有抛出一个应该抛出的错误。当我将id添加到请求体中时,响应应该是这样的:
{
"error": "\"id\" is not allowed"
}
我想忽略id,因为我想通过req.params.id接收它。我可能不是最好的方法,但我愿意接受新的建议!
1条答案
按热度按时间waxmsbnn1#
文档中有一个将tailor与
alter
配合使用的示例