【发布时间】:2022-01-08 21:14:27
【问题描述】:
我有一个 JOI 验证方案,其中一些值在其他方案和其他地方也需要,所以我将所有这些值放在一个单独的文件中并将它们导入方案中。
方案:
const ENUMS = require(path.join(__dirname, 'enums'))
const Product = Joi.object({
name: Joi.string(),
category: Joi.string().valid(ENUMS.validProductCategory),
description: Joi.string().allow(ENUMS.empty)
})
枚举.js
module.exports.productCategory = ['JEWEL', 'WATCH', 'EARRING']
module.exports.empty = '', null
问题在于Joi.valid() 和Joi.allow() 不接受数组作为值(请参阅https://joi.dev/api/?v=17.5.0#anyallowvalues)。函数中的值需要传递为.valid('a', 'b')
我不知道这些值是如何从枚举文件返回的。我尝试了一些方法(如module.exports.empty)和传播(...)选项。
我也不让它工作,所以我想知道如何以正确的格式返回字符串以重复使用它?
【问题讨论】:
-
尝试使用
.apply(...)?类似Joi.string().valid.apply(Joi, ENUMS.validProductCategory) -
@Marc 我没有尝试过,它看起来适用于
valid()函数,但对于alow()函数却不行。Joi.string().allow.apply(Joi, ENUMS.empty)给TypeError: this._values is not a function任何想法? -
@Marc 顺便说一下,我将枚举中的所有导出更改为数组。所以
ENUMS.empty是['', null] -
module.exports.empty = '', null无效。.apply首先接受一个“this”范围,第二个参数是一个数组。您可以在 mdn 上阅读有关 apply 的更多信息。