当前位置: 首页 > news >正文

苏州网站建设极简幕枫公司对比网站

苏州网站建设极简幕枫,公司对比网站,王野天,资源网站建设多少钱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


下一节-使用zod检验

http://www.yayakq.cn/news/443494/

相关文章:

  • 村级网站模板wordpress 商成
  • 如何查找网站所有页面基于php的动态校园兼职网站设计论文
  • 百度推广手机网站百度网站下拉怎么做的
  • 3免费网站建站装潢设计多少钱
  • 下做图软件在哪个网站下载手机系统网站
  • 同德县网站建设公司线上外贸平台有哪些
  • 网站布局方式如何上wordpress
  • 免费申请个人网站查询网网站
  • 手机分销网站门户网站优化怎么做
  • 中国煤炭建设协会网站qc昭通做网站
  • 做公司网站的公17网站一起做网店池尾商圈
  • 朝阳区北京网站建设企业网站建设御彩云
  • 电子商城网站建设流程宝安官网网站建设比较好的
  • 使页面具有动态效果的网站建设技术是网站建设情况的报告
  • 网站做商标在那类网站开发有什么注意的
  • 可做兼职的翻译网站有哪些网站加密传输怎么做
  • 网站设计毕业设计题目桂林网红打卡景点
  • asp网站发邮件泰安房产价格最新
  • 德清网站建设西安市精神文明建设网站
  • 多用户网站管理系统小程序和app
  • 网站推广的四个阶段node.js 做网站
  • 电子商务网站系统规划报告湖南微信网站公司电话
  • 做邀请函好的网站网络营销推广方案3000字
  • 上海住房和城乡建设部网站官网青岛网站设计公司联系方式
  • 做前端常用的网站及软件下载学校部门网站的建设
  • 在小型网站建设小组莘县网站开发
  • 网站做md5脚本企业建立网站的好处
  • 怎样给网站做排名优化泰州网站优化公司
  • 谷歌外贸网站推广网站开发毕设论文
  • 国内做性视频网站有哪些技术培训机构排名前十