node.js表单验证Joi新版使用方法教程

发布时间:2022-5-23 09:34

记录一下自己在写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就是关于数据库查询和插入这方面的代码。

本地环境利用Node.js实现石头剪刀布游戏 网站建设

本地环境利用Node.js实现石头剪刀布游戏

前一段日子学了个石头剪刀布游戏,自己在本地进行了实现,想挂在自己服务器上让他形成一个外网可访问的游戏的时候,出了问题,是接口请求路径不对的问题,现在还不知道什么原因,等解决之后我还会更一下。 所需要...
GoLang与Java各自生成grpc代码流程介绍 生活杂谈

GoLang与Java各自生成grpc代码流程介绍

1.背景: 由于公司的日志系统使用的是plumelog,最近生产环境老是报 jedis连接池不够,导致丢失日志,而且服务老是重启,怀疑跟日志系统有关,于是自己改造plumelog,使用go grpc...
MySQL同步数据Replication的实现步骤 生活杂谈

MySQL同步数据Replication的实现步骤

MySQL提供了Replication功能,可以实现将一个数据库的数据同步到多台其他数据库。前者通常称之为主库(master),后者则被称从库(slave)。MySQL复制过程采用异步方式,但延时非常...