Как проверить объект, чтобы разрешить использование только белых ключей с помощью схемы?
Чтобы пользователь не мог отправлять вредоносные подобъекты в объект, я пытаюсь проверить его ввод с помощью Joi validate и схемы.
// This is the Joi schema
let schema = Joi.object().keys({
1: Joi.object().keys({
_id: Joi.string(),
title: Joi.string(),
modules: Joi.array().items(Joi.string())
}),
2: Joi.object().keys({
_id: Joi.string(),
title: Joi.string(),
modules: Joi.array().items(Joi.string())
}),
});
Теперь я хочу, чтобы у пользователя была возможность заполнять _id, title и modules под ключом 1 и ключом 2.
Если пользователь отправит ключ 3, я хочу, чтобы проверка схемы прошла неудачно.
Если пользователь заполняет "firstName" под ключом 1 или ключом 2, что недопустимо, я также хочу, чтобы его запрос не выполнялся.
Я знаю, что Джой предлагает "обязательный" метод, и все, что не считается "обязательным", является необязательным.
Однако та же схема, которую я прикрепил выше, дает сбой, когда пользователь, например, не предоставляет "модули". Что необязательно, не обязательно.
Я пытаюсь решить проблему с помощью валидатора Joi или использовать другой модуль npm.
Примечание: на этот раз я просто хочу проверить ключи объекта на белом фоне, а не что-то продвинутое, например, проверку длины, типов или регулярных выражений. Я делаю такую проверку "вручную" для каждого поля. Есть ли у вас лучший подход?
У вас есть решение для этой проблемы в Joi проверить?
Или, может быть, вы знаете лучше пакет npm для этой задачи?