一个路由,两个有效的有效负载在Hapi.js与Joi

Cla*_*kie 0 javascript node.js hapijs joi

我正在尝试在同一路由上验证两个不同的有效负载模式.两个有效选项是:

validate: {
  payload: {
    email: Joi.string().required(),
    password: Joi.string().required()
  }
}
Run Code Online (Sandbox Code Playgroud)

validate: {
  payload: {
    token: Joi.string().required()
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用andor函数的组合非常接近,但它允许所有三个作为有效负载传递:

validate: {
  payload: Joi.object().keys({
    email: Joi.string().required(),
    password: Joi.string().required(),
    token: Joi.string().required()
  }).and('email', 'password').or('token', 'email', 'password')
}
Run Code Online (Sandbox Code Playgroud)

Cla*_*kie 6

实际上,我解决了这个问题.我需要使用xor两个依赖中的一个:

validate: {
  payload: Joi.object().keys({
    email: Joi.string(),
    password: Joi.string(),
    token: Joi.string()
  }).and('email', 'password').xor('token', 'password')
}
Run Code Online (Sandbox Code Playgroud)