#node.js #types #enums #joi
#node.js #типы #перечисления #joi
Вопрос:
У меня есть схема проверки 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)
})
Enums.js
module.exports.productCategory = ['JEWEL', 'WATCH', 'EARRING']
module.exports.empty = '', null
Проблема в том, что Joi.valid()
and Joi.allow()
не принимает массивы в качестве значений (см. https://joi.dev/api/?v=17.5.0#anyallowvalues ). Значения в функции должны передаваться как .valid('a', 'b')
Я не знаю, как вернуть эти значения из файла перечислений. Я пробовал несколько способов (например module.exports.empty
, ) и с параметрами spreading ( ...
).
Я тоже не могу заставить это работать, поэтому мне интересно, как я могу вернуть строку в нужном формате для ее повторного использования?
Комментарии:
1. Пробовали использовать
.apply(...)
? Что-то вродеJoi.string().valid.apply(Joi, ENUMS.validProductCategory)
2. @Marc Я не пробовал, и, похоже, он отлично работает для
valid()
функции, но дляalow()
функций это не так.Joi.string().allow.apply(Joi, ENUMS.empty)
естьTypeError: this._values is not a function
идеи, как это сделать?3. @Marc Кстати, я изменил весь экспорт в перечислениях на массив. Так
ENUMS.empty
же['', null]
4.
module.exports.empty = '', null
недопустимо..apply
принимает в качестве первой «эту» область и в качестве второго аргумента массив. Вы можете прочитать больше о применении к mdn.
Ответ №1:
если у вас есть перечисление, например
enum ValidStringsEnum {
DESCRIPTION_ONE = "description one",
DESCRIPTION_TWO = "description two",
}
вы могли бы сделать:
description: Joi.string().valid(...Object.values(ValidStringsEnum))