【Express.js】express-validator

这篇具有很好参考价值的文章主要介绍了【Express.js】express-validator。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

express-validator

express.js 集成 express-validator进行数据校验

在最初的时候,对于请求的数据校验,我们是自定义一个中间件,然后在里面通过最原生的方式检验。在本节,我们将尝试用一种更优雅的方式进行数据校验。

准备工作

创建一个基础的 express 项目(本文基于evp-express-cli),并支持全局同步和异步错误错误处理。

安装express-validator,并引入:

npm i express-validator
const validator = require('express-validator');

验证链

validator:

  • body()
  • cookie()
  • header()
  • param()
  • query()

validator.query为例,我们可以检查query参数中的某一项

router.get('/greet', 
	validator.query('person').trim().notEmpty().escape().withMessage("person不能为空"),
(req, res, next) => {
  const valires = validator.validationResult(req);
  if (!valires.isEmpty()) {
    const err = new Error(valires.array()[0].msg);
    throw err;
  }
  logger.info(`Hello ${req.query.person}!`);
  res.send(`Hello ${req.query.person}!`);
});

validationResult()用法获取校验结果,valires是校验结果,主要结构如下:

{
  //...
	errors: []
}

errors需要通过valires.array()来得到,当然序列反序列化也行
每一项error结构如下:

{
	"type": string,
	"msg": string,
	"path": string, //如上面检查的person
	"location": string //如query,body..
}

如果需要检验多个参数,就放进数组即可:

[
  validator.query('person').trim().notEmpty().escape().withMessage("person不能为空"),
  validator.query('address').trim().notEmpty().escape().withMessage("address不能为空")
]

封装剥离

之前的写法,是把错误处理和定义都直接写在路由上,臃肿且代码侵入性较强,我们可以进一步封装:

Checker:
这个示例采取了检验并发竞赛的机制,你也可以使用其它的并发或者同步机制:

/**
 * Validator Race checker
 * @param {validator.ValidationChain[]} validChain 
 * @returns 
 */
const ValidRace = (validChain)=>{
  return async (req, res, next) => {
    await Promise.race(validChain.map(validate => validate.run(req)))
    const valires = validator.validationResult(req);
    if (!valires.isEmpty()) {
      console.log(valires.array());
      const err = new Error(valires.array()[0].msg);
      throw err;
    }
    next();
  }
}

然后在路由上使用即可:

router.get('/greet2',
  ValidRace([
    validator.query('age').trim()
      .notEmpty().withMessage("age不能为空").bail()
      .isInt().withMessage("age必须是正整数").bail().toInt()
  ]),
(req, res, next) => {
  logger.info(`Hello ${req.query.person}!`);
  res.send(`Hello ${req.query.person}!`);
});

bail()的用处是,如果前面出错就终止检验链,不加的话,age空了还会往后面检验是不是整数。

当然你也可以赋给一个变量,然后再引进来:

const CheckGreet2 = ValidRace([
  validator.query('age').trim()
    .notEmpty().withMessage("age不能为空").bail()
    .isInt().withMessage("age必须是正整数").bail().toInt()
]);
router.get('/greet2', CheckGreet2, (req, res, next) => {
  logger.info(`Hello ${req.query.person}!`);
  res.send(`Hello ${req.query.person}!`);
});

express-validator的用法远远不止于此,详见官方文档https://express-validator.github.io/docs文章来源地址https://www.toymoban.com/news/detail-642884.html


下一节-使用zod检验

到了这里,关于【Express.js】express-validator的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Node.js】Express-Generator:快速生成Express应用程序的利器

    在Node.js世界中,Express是一个广泛使用的、强大的Web应用程序框架。它为开发者提供了一系列的工具和选项,使得创建高效且可扩展的Web应用程序变得轻而易举。然而,对于初学者来说,配置和初始化Express应用程序可能会有些困难。为了解决这个问题,Express团队推出了一款名

    2024年02月10日
    浏览(55)
  • 【Express.js】软件测试

    本节介绍如何在 express.js 使用 Jest 进行单元测试 准备一个基础的 express 项目,本文基于 evp-express-cli 安装 Jest 生成 Jest 配置 创建测试文件,以 .test.js 后缀命名,Jest 在运行期间会自动查找并执行符合 *.test.js 命名的文件,为规范起见,新建一个 test 目录,存放所有的测试文件

    2024年02月13日
    浏览(36)
  • 【Express.js】处理请求数据

    本节将具体介绍express后端处理请求源携带数据的一些方法和技巧 很多时候我们需要处理一些类似但有操作差别或不同对象的业务,我们可以监听一段基本路径,将其中某一个段或者某几段路径作为变量,在接口中根据不同的路径变量执行不同的业务操作,这是一种REST风格比

    2024年02月11日
    浏览(39)
  • 【Express.js】全局错误处理

    在前面几节里,我们处理异常的方法都是手动在可能引发异常的地方捕捉错误,这固然是必要的,可以有针对性得处理异常,但很多时候,有许多潜在的异常,有一句话叫永远不要相信输入的数据,你永远都不知道什么时候可能会以什么方式触发某些阴间异常从而造成系统崩

    2024年02月10日
    浏览(47)
  • 【Express.js】微服务架构

    微服务 微服务架构是将一个单体应用程序拆分为一个个独立且保持松耦合的服务的一种架构方式,每个服务有着独立的数据库并且能独立运行部署,所有的服务最终可以被视作一个集群而进行统一管理 优缺点 从微服务的理念着手,它的优缺点绝大部分能通过与单体应用相对

    2024年02月16日
    浏览(42)
  • 【Express.js】集成Websocket

    本节我们介绍在如何在 express 中集成 websocket。 WebSocket 服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。 创建一个 express.js 项目(本文基于evp-express-cli) 安装ws.js: (本教程使用更通用的ws.js,有

    2024年02月13日
    浏览(35)
  • 【Express.js】集成SocketIO

    本节我们介绍在如何在 express 中集成 Socket.IO Socket.IO 算是 WebSocket 的一个超集,进行了一些封装和拓展。 创建一个 express.js 项目(本文基于evp-express-cli) 安装socket.io.js: 正常的项目都是分层的,为了避免循环依赖,本文采用代理类构造单例的方式来创建websocket服务器。 wsPro

    2024年02月13日
    浏览(38)
  • 【Express.js】集成Redis

    本节我们介绍在 express.js 中集成 redis. Redis是一个高性能的key-value内存数据库,支持事务、队列、持久化等特性,常用于高并发性能场景。 创建一个 express.js 项目(本文基于evp-express-cli) 在开发环境下安装redis 安装redis.js: 正常的项目都是分层的,为了避免循环依赖,本文采用

    2024年02月13日
    浏览(42)
  • 【Express.js】集成RabbitMQ

    本节我们介绍在 express.js 中集成 rabbitmq. RabbitMQ 是一个消息队列中间件,常用于请求削峰,事务的队列处理,事件订阅机制的实现等。 创建一个 express.js 项目(本文基于evp-express-cli) 在开发环境下安装rabbitmq 安装amqplib.js: 正常的项目都是分层的,为了避免循环依赖,本文采用

    2024年02月13日
    浏览(35)
  • 【Express.js】使用zod检验

    上一节我们介绍了 express-validator,本节我们介绍一个更通用的检验工具 Zod 写前端的同学可能知道Zod,我们在提交表单前需要对数据初步检查,Zod是一个很棒的工具。前端可以偷懒,但后端不能偷懒,Zod也可以用到我们的 express 后端中来,封装一个 Zod 中间件即可 用 evp-expre

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包