Проверка Joi: несколько сообщений об ошибках проверки для одного поля

Я пытаюсь добиться следующего потока проверки через 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')),
});

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


person iam batman    schedule 26.11.2018    source источник


Ответы (1)


Фактически вы можете предоставить обратный вызов функции 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);
        });
});
person Anand Undavia    schedule 26.11.2018