如何在 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() );
所以,我使用 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() );