gpt4 book ai didi

javascript - 我们如何为不同的请求类型编写 Joi 模式?

转载 作者:行者123 更新时间:2023-12-04 11:55:36 25 4
gpt4 key购买 nike

我一直在尝试创建一个模式。它代表我的对象,就像 {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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com