Проверки Joi: множественные сообщения об ошибках проверки для одного поля - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь добиться следующего потока проверки через пакет joi https://www.npmjs.com/package/joi.

1) Проверьте, существует ли поле category, если не отображается ошибка category required.

2) Проверьте, что поле категории допускает только алфавиты, если не отображается сообщение об ошибке provide valid category

Вот мой код

const schema = Joi.object().keys({
    category: Joi.string().required().error(new Error('category is required')),
    category: Joi.string().regex(/^[a-zA-Z]*$/).required().error(new Error('category is not valid')),
});

Но это не сработало, как ожидалось

1 Ответ

0 голосов
/ 26 ноября 2018

Вы можете фактически обеспечить обратный вызов для функции error() и проверить, что вызвало ошибку.

Обратный вызов в вашем случае будет выглядеть так:

const onError = x => {
    switch (x[0].type) {
        case 'any.required': {
            return new Error('category is required');
        }
        case 'string.regex.base': {
            return new Error('category is not valid');
        }
        default: {
            return new Error('category has some error');
        }
    }
}; 

Тогда вы можете использовать его так:

category: Joi.string()
        .regex(/^[a-zA-Z]*$/)
        .required()
        .error(onError)

Вот полный фрагмент, который я использовал:

const Joi = require('joi');

const onError = x => {
    switch (x[0].type) {
        case 'any.required': {
            return new Error('category is required');
        }
        case 'string.regex.base': {
            return new Error('category is not valid');
        }
        default: {
            return new Error('category has some error');
        }
    }
};

const schema = Joi.object().keys({
    category: Joi.string()
        .regex(/^[a-zA-Z]*$/)
        .required()
        .error(onError)
});

const testCategories = [{ category: 'ABCD' }, {}, { category: '&&&' }];

testCategories.forEach(aCategory => {
    schema
        .validate(aCategory)
        .then(() => {
            console.log(JSON.stringify(aCategory), 'passed!');
        })
        .catch(e => {
            console.log(JSON.stringify(aCategory), 'failed', e);
        });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...