我一直在尝试创建一个模式。它代表我的对象,就像 {name:"Joe Doe", id:"1234567890"}
但是在第一个请求是创建新的;它在对象中不应有 id 参数。否则,这可能意味着对消费者的更新......
您对实现它的最佳方法有任何想法吗?
我需要什么作为 joi 模式 ;
joi.object().keys({
id: joi.string().forbidden() or required(),
name: joi.string(),
...
示例请求;
创造:
POST 请求...
'api/v1/项目/'
对象:
{name:"Joe Doe"}
更新:
PUT 请求...
'api/v1/项目/'
对象:
{id:"1234567890", name:"Joe Doe"}
最佳答案
您可以在调用 validate 方法时使用 Joi 的上下文选项。就像是
var Joi = require("@hapi/joi");
const schema = Joi.when(Joi.ref("$method"), {
"is": "put",
"then": Joi.object().keys({
"id": Joi.string().required(),
"name": Joi.string()
}),
"otherwise": Joi.object().keys({
"id": Joi.string().forbidden(),
"name": Joi.string()
})
});
function validate() {
const result = schema.validate({"id": "123", "name": "myname"}, {"context": {"method": "put"}});
console.log(result);
}
validate();
如果您将方法作为 put 传递,它将使用 put schema else post schema。
关于javascript - 我们如何为不同的请求类型编写 Joi 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59533278/