• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
spring39
帮助1

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfiijie
系列文章
更多 icon
同类精品
更多 icon
继续加载