我有1条路由,2种不同的joi模式,并且我希望能够根据有效载荷中的字段动态选择我使用的模式。
“一条路线,两个架构(带有Joi的Hapi.js)”
所以对于上下文,我有一个hapi路由,并且正在使用joi验证“ someSchema” hapiRoute.js:
...
"validate": {
"payload": someSchema
}
...
在schema.js中:
function ChooseSchema(schemaA, schemaB) {
return Joi.when(Joi.ref("payload.data.attributes.someField"), {
"is": Joi.string().valid("fieldIsValue"),
"then": schemaA,
"otherwise": schemaB
});
}
module.exports = {
"someSchema": ChooseSchema(schemaA, schemaB)
}
schemaA和schemaB不同的地方
因此,如果“ someField” ID等于值:“ fieldIsValue”,则尝试使用“ schemaA”,否则使用schemaB。 当前,它没有获得此值“ someField”,因此我相信只是返回schemaB
答案 0 :(得分:0)
这是可行的: 在hapiRoute.js中使用“ request.query ...”:
...
"onPostAuth": {
"method": (request, hapi) => {
request.query.someField= request.someInfo.somefield;
...
您可以像这样在schema.js中访问它:
function ChooseSchema(schemaA, schemaB) {
return Joi.when(Joi.ref("$query.someField"), {
"is": Joi.string().valid("fieldIsValue"),
"then": schemaA,
"otherwise": schemaB
});
}
因此,基本上我们设置了查询字符串参数,然后在joi模式中可以使用该值。