当前位置: 首页 > 工具软件 > Joi > 使用案例 >

Joi如何显示自定义错误消息Joi.validate%20is%20not%20a%20function

章高爽
2023-12-01

学习joi的过程中在导出e.message过程中发现了如下错误

Joi.validate%20is%20not%20a%20function

通过查找发现是新版本joi的语法问题
原代码

//引入joi模块
const Joi=require('joi')

module.exports=async(req,res)=>{

    //定义对象的验证规则
    const schema={
        username:Joi.string().min(2).max(12).required().error(new Error('用户名不符合验证规则')),
        email:Joi.string().email().required().error(new Error('邮箱格式不符合要求')),
        password:Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/).required().error(new Error('密码格式不符合要求')),
        role:Joi.string().valid('normal','admin').required().error(new Error("角色值非法")),
        state:Joi.number().valid(0,1).required().error(new Error('状态值非法'))

    }
    //用try{}catch(){}语句来捕获异步函数的异常
    try{
        //实施验证
        await Joi.validate(req.body,schema)
    }catch(e){
        //验证没有通过
        //e.message
        //重定向回用户添加页面
        res.redirect(`/admin/user-edit?${e.message}`)
    }

更改后

//引入joi模块
const Joi=require('joi')

module.exports=async(req,res)=>{

   //定义对象的验证规则
   const schema=Joi.object({
       username:Joi.string().min(2).max(12).required().error(new Error('用户名不符合验证规则')),
       email:Joi.string().email().required().error(new Error('邮箱格式不符合要求')),
       password:Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/).required().error(new Error('密码格式不符合要求')),
       role:Joi.string().valid('normal','admin').required().error(new Error("角色值非法")),
       state:Joi.number().valid(0,1).required().error(new Error('状态值非法'))

   })
   //用try{}catch(){}语句来捕获异步函数的异常
   try{
       //实施验证
       await schema.validateAsync(req.body)
   }catch(e){
       //验证没有通过
       //e.message
       //重定向回用户添加页面
       res.redirect(`/admin/user-edit?${e.message}`)
   }
   
   
}

参考文章https://blog.csdn.net/m0_46248316/article/details/107836409

 类似资料: