可以用 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就是关于数据库查询和插入这方面的代码。