koa后端数据校验

koa后端数据校验

对每个接口的传入参数进行校验,是一个 Web 后端项目的必备功能,本文将介绍 koa 中如何使用joi进行数据格式检验。

安装 Joi

1
$ yarn add Joi

接下来将以对registeruser进行后端数据校验为例

创建数据校验中间件

middlewares/validator.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @desc 数据校验中间件
* @param {function} validateFunc validators 里的校验器函数
*/
function validatorMiddleware(validateFunc) {
return async function validator(ctx, next) {
const { error } = validateFunc(ctx.request.body);
if (error) {
console.log('校验器【 %s 】,数据校验失败', validateFunc.name);
console.error(error);
// 使用joi时的自定义错误||joi提供的错误展示
ctx.body = error.message || error.details[0].message;
return;
}
await next();
};
}

export default validatorMiddleware;

创建 User 校验规则,并校验

src/validators/user.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 校验用户数据格式
* @param {Object} data 用户数据
*/
export function userValidator(data) {
const schema = Joi.object({
userName: Joi.string()
.min(2)
.max(255)
.pattern(/^[a-zA-Z][a-zA-Z0-9_]+$/)
.required(),
password: Joi.string()
.pattern(/^[a-zA-Z0-9]{3,30}$/)
.error(new Error('密码格式不对,请重新设定')),
repeat_password: Joi.ref('password'),
});
return schema.validate(data);
}

注册接口使用数据校验中间件,传入 userValidator 校验 User

src/routes/user.js

1
2
3
4
5
6
7
8
9
10
import Router from '@koa/router';
import validatorMiddleware from '../middlewares/validator';
import { handleUserRegister } from '../controllers/user';
import { userValidator } from '../validators/user';

const router = new Router({ prefix: '/user' });

router.post('/register', validatorMiddleware(userValidator), handleUserRegister);

export default router;

更多校验方法

  • ajv:基于JSON Schema的数据校验库

JSON Schema: JSON Schema 并不是某个库,只是一种标准,简单的来说就是通过 json 格式来描述数据,而 ajv 就是对 JSON Schema 的具体实现之一.

参考链接

作者

Sea

发布于

2021-07-06

更新于

2023-01-10

许可协议

评论