一种路线,使用Joi验证Hapi.js中的有效负载的2种不同模式

时间:2019-06-13 10:26:41

标签: javascript hapijs joi

我有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

1 个答案:

答案 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模式中可以使用该值。