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

node.js表单验证Joi新版做法

谯德佑
2023-12-01

记录一下自己在写node.js表单验证这块的做法

可以用 validator,也可以用Joi,这两个的下载量都很大, 个人是采用Joi,这里附上它的文档地址
Joi示例文档

首先创建表单的验证规则,暂时只设置了关于账号和密码的

const Joi = require("joi")
// 定义表单验证规则
const schema = Joi.object({
    name: Joi.string().alphanum().min(5).max(12).required().error( new       
    Error("账号不规范")),
    password: Joi.string().required().regex(/^[a-zA-Z0-9]{8,16}$/).error(
        new Error("密码不规范")
    ),
});
// const info = {name: 'abc454', password:"6546"}
// schema.validateAsync(info);
module.exports= schema

可以用下方注释代码进行测试是否有效
由于我是模块化的选择,向外暴露验证规则
在表单验证主模块里进行引入

const user_schema = require("../schema/user")

这里设置表单验证的中间件,也可以不设置直接放在主验证之中也可以

exports.validation = async(req,res,next)=>{
    try {
       const value= await user_schema.validateAsync(req.body);
       next()
    }catch(err){
       // console.log("这里被用到了");
        return res.cc(err)
    }
}

这里默认设置的是req.body里面的数据,也可以不接收验证的数据
res.cc是相当于封装的res.send,这里附上代码

app.use(function(req,res,next){
    // 定义一个res.send的全局中间件,必须要在所有路由之前
    // 只需要输入错误参数即可实现res.send,默认是错误的
    res.cc = function(err,status=1){
        res.send(
            {
                status,
                // 这里判断err是不是错误的实例对象,是就输出,不是就输出参数
                message:err instanceof Error ? err.message : err
            }
        )
    }
    next()
})

在路由中引入中间件和验证模块

const {validation , regUser, login}= require("../router_handler/user")
// 注册

// 这里可以写中间件来先判断注册的数据是否合法
router.post("/registered",validation,regUser
    // 这里也要调用数据库
)

regUser就是关于数据库查询和插入这方面的代码。

 类似资料: