【问题标题】:Joi validations: multiple validation error messages for single fieldJoi 验证:单个字段的多个验证错误消息
【发布时间】:2019-04-28 04:06:33
【问题描述】:

我正在尝试通过 joi https://www.npmjs.com/package/joi 包实现以下验证流程。

1)如果不显示错误category required,则检查字段category是否存在。

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')),
});

但它并没有按预期工作

【问题讨论】:

    标签: javascript validation express joi


    【解决方案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)
    

    这是我使用的完整的 sn-p:

    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);
            });
    });
    

    【讨论】:

      猜你喜欢
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多