Как я могу показать полный путь атрибута проверки Джой - PullRequest
0 голосов
/ 11 октября 2018

Я использую валидацию Joi, у меня слишком много атрибутов, которые выглядят одинаково с другими в теле, я не могу показать полный путь, он просто показывает, что чего-то не хватает, не давая пользователю понять, что не так, взглянуть наследующие

body: {
            member: Joi.object().required().keys({
                id: Joi.string().required(),
                phone: Joi.string(),
                email: Joi.string().required().regex(/^([a-zA-Z0-9_\-\.]+)@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]+)$/)
            }),
            member2: Joi.object().required().keys({
                id: Joi.string().required(),
                phone: Joi.string(),
                email: Joi.string().required().regex(/^([a-zA-Z0-9_\-\.]+)@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]+)$/)
            })
}

, как вы видите выше, эти два члена имеют те же атрибуты, что и должны быть, если отсутствует идентификатор, просто требуется указать идентификатор независимо от того, где отсутствует, я пытаюсь сделать что-то вроде следующего, если member2отсутствует, но мне не удалось

{message:  member2.id is required}

не просто показать идентификатор отсутствует.какие-нибудь решения?

1 Ответ

0 голосов
/ 14 октября 2018

Как обойти. Вы можете использовать .lable() в JOI. Лейбл решит эту проблему

.label() может обернуть имя атрибута во время выполнения при проверке.например,

body: {
            member: Joi.object().required().keys({
                id: Joi.string().required(),
                phone: Joi.string(),
                email: Joi.string().required().regex(/^([a-zA-Z0-9_\-\.]+)@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]+)$/)
            }),
            member2: Joi.object().required().keys({
                id: Joi.string().required(),
                phone: Joi.string(),
                email: Joi.string().required().regex(/^([a-zA-Z0-9_\-\.]+)@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]+)$/)
            })
}

Теперь предположим, что в телефоне member.phone есть ошибка, а member2.phone не

, результат проверки будет phone не совпадает.это немного сбивает с толку!какой телефон?это member2 или member one?Теперь давайте попробуем использовать .lable()

body: {
                member: Joi.object().required().keys({
                    id: Joi.string().required(),
                    phone: Joi.string().label('member.phone'),
                    email: Joi.string().required().regex(/^([a-zA-Z0-9_\-\.]+)@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]+)$/)
                }),
                member2: Joi.object().required().keys({
                    id: Joi.string().required(),
                    phone: Joi.string().label('member2.phone'),
                    email: Joi.string().required().regex(/^([a-zA-Z0-9_\-\.]+)@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]+)$/)
                })
    }

, результат проверки теперь будет

error member.phone doesn't match
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...