【问题标题】:Enums for JOI scheme validation用于 JOI 方案验证的枚举
【发布时间】: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 的更多信息。

标签: node.js types enums joi


【解决方案1】:

如果你有一个枚举,例如

enum ValidStringsEnum {
    DESCRIPTION_ONE = "description one",
    DESCRIPTION_TWO = "description two",
}

你可以这样做:

description: Joi.string().valid(...Object.values(ValidStringsEnum))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 2020-02-17
    • 1970-01-01
    • 2019-09-08
    • 2010-09-06
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多