如何在 Joi 的 valid() 内部传递引用

How to pass reference inside of valid() of Joi

所以,我使用 Joi 进行验证,我有类似这样的东西来验证我的枚举选择之一(["cookie", "pie", "lemon", "chiken"],它正在工作。

// ...some code
Joi.object({
  // ...some code
  someField: Joi.string().valid("cookie", "pie", "lemon", "chiken").required(),
  // ...some code

但我想使用这样的参考:

let a = 'cookie, pie, lemon, chiken'
// ...some code
Joi.object({
  // ...some code
  someField: Joi.string().valid(a).required(),
  // ...some code

它不能正常工作......它以不同的方式对待它:

"myfieldname" must be [cookie, pie, lemon, chiken]

应该是这样的

"myfieldname" must be one of [cookie, pie, lemon, chiken]

您可以使用 ES6 扩展语法:

let a = ['cookie', 'pie', 'lemon', 'chiken'];
// ...some code
Joi.object({
  // ...some code
  someField: Joi.string().valid(...a).required(),
  // ...some code

编辑:使用旧的 JS 语法,它看起来像这样:

let a = ['cookie', 'pie', 'lemon', 'chiken'];
// ...some code
Joi.object({
  // ...some code
  someField: Joi.string().valid.apply(null, a).required(),
  // ...some code

或者如果您真的想将参数作为一个字符串而不是字符串数组提供:

let aAsString = 'cookie, pie, lemon, chiken';
let a = aAsString.split(",").map( s => s.trim() );