Nodejs 分享一个 express 参数验证组件

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

Nodejs 分享一个 express 参数验证组件

缘起

在项目开发中,前后端分离,后端采用 express 提供 api 接口。有一个非常常见的需求是接口参数验证,比如

  • 获取用户地址列表,需要判断用户是否以 query 形式传入 token、limit、skip

原始做法是在业务函数中判断,但是这样太麻烦了

需求

我们需要这样的一种框架,他需要满足下面几点

1.基于配置的参数验证

这个框架需要做到不需要在业务逻辑里判断,只需要提供一个配置 json 就可以自动进行验证。例如上面的例子中,只需要提供

Screen Shot 2017-08-15 at 8.04.11 PM.png

2.灵活,可以满足各类参数验证

例如,我们需要判断这个 limit 是一个整数,并且范围是 10-50,skip 也是一个整数,范围是 0-100

再例如,我们需要要求 token、skip、limit 这三个参数都必须放在 query 里面

再例如,在一个 Post 接口里面,我们需要要求参数在 body 里面,并且还是自动解析的

快速使用

基于上面的需求,提高开发效率,开发了适用于 express 的 joi-router。再说他的特性之前,先看他是怎么用的

Screen Shot 2017-08-15 at 8.10.28 PM.png

上面这里例子里,验证的是 query 参数必须有一个 userId,并且 userId 必须是字母和数字的组合,长度在 3 个字节到 30 个字节之间。

再看个复杂点的例子

Screen Shot 2017-08-15 at 8.15.37 PM.png

是不是用起来很简单,尤其是参数特别多的时候,并且组合在一起的时候。

Feature

这个项目有如下几个特点

  • Api 参数验证
  • Api 返回结果格式验证
  • 使用例子
  • 完善的测试代码(代码测试覆盖率 90%以上)
  • 持续集成

未来还会提供一种功能,就是根据你的代码,生成接口文档。

项目地址

欢迎大家 Follow 和 Star,更欢迎你参与进来提出意见,提出 PR

Joi-router

https://github.com/sunkuo/joi-router

你可以在 github 上看到安装使用说明

引用

joi koa-joi-router


3 回复

ajv 似乎挺不错的,试试你这个。写参数验证着实头疼烦琐无聊


我们这边也用的 ajv,json-schema 毕竟还是有个通用规范,用那个配置也还算是挺方便的.

在Node.js中,使用Express框架时,参数验证是一个常见的需求。一个流行的参数验证中间件是express-validator。它提供了简洁的API来进行请求参数的验证,并支持同步和异步验证规则。

以下是一个简单的示例,展示了如何使用express-validator来进行参数验证:

首先,你需要安装express-validator

npm install express-validator

然后,你可以在你的Express应用中这样使用它:

const express = require('express');
const { check, validationResult } = require('express-validator');
const app = express();

app.post('/user', [
  check('username').isLength({ min: 1 }).trim().escape(),
  check('email').isEmail(),
  // 你可以添加更多的验证规则
], (req, res) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(400).json({ errors: errors.array() });
  }
  // 如果验证通过,处理请求
  res.send('User info is valid!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

在这个示例中,我们对POST到/user的请求进行了参数验证。如果验证失败,我们将返回一个400状态码和错误信息。如果验证通过,我们继续处理请求。

express-validator非常灵活,支持链式调用多种验证规则,并且可以轻松地与Express集成。希望这个示例对你有所帮助!

回到顶部