允许 Joi 中的可选参数而不指定它们

Allow optional parameters in Joi without specifying them

我对使用 Joi 在 hapi 中验证请求负载还很陌生。我的问题如下。我有这条定义的路线:

{
    method: 'POST',
    path: '/foo/bar',
    config: {
      description: 'foo.bar',
      handler: handlers.foo,
      auth:false,
      tags: ['api'],
      validate: {
        payload: {
          email : Joi.string().required(),
          password : Joi.string().required(),
        }
      }
    }
}

电子邮件和密码是我需要的属性。但是,我想允许其他属性而不必全部指定它们。例如:

{
  email: foo@bar.com,
  password: fooPass,
  name: myName,
  surname: mySurname
}

有没有办法用 Joi 做到这一点?

您可以在options中将allowUnknown设置为true:

validate: {
  payload: {
    email : Joi.string().required(),
    password : Joi.string().required(),
  },
  options: {
    allowUnknown: true
  }
}

options 参数在验证时传递给 Joi

对于当前版本的 Joi (v15.1.0),同时执行

Joi.validate(value, schema, options)

设置allowUnknown: true

进入 options 对象。

参考

https://github.com/hapijs/joi/blob/v15.1.0/API.md#validatevalue-schema-options-callback