[分享]Nodejs Koa 请求参数验证 Middleware
[分享]Nodejs Koa 请求参数验证 Middleware
先上 github 地址 koa-proper
最近写 node 服务端写多了,每个接口都要进行参数验证。 重复代码很多,所以抽象了一个中间件。
功能:
- 对参数对象进行类型验证,基于 prop-types (一个 react 衍生的类型定义库)
- 验证失败自动抛出 http 400 错误 (可关闭,可自定义)
使用简单,功能实用,话不多说看代码:
import Koa from 'koa'
import proper from 'koa-proper'
const app = new Koa()
app.use(proper())
app.use(async ctx => {
// 请求参数: {string: any}
const props = ctx.request.query
// 定义参数类型: {string: PropType}
// ctx.PropTypes 就是 prop-types
const types = {
username: ctx.PropTypes.string.isRequired
}
// ctx.proper 为验证方法
// 如果验证通过,返回原数据
const params = ctx.proper(props, types)
// 如果失败, 会自动抛出 http error
// 可以在 options 里关闭或者自定义
// ctx.throw(400, error) <---- 默认的错误抛出方法
// 验证通过才会执行下面代码
ctx.body = params
})
再上 github 地址 koa-proper
1 回复
你好!
关于Node.js Koa框架中的请求参数验证中间件,确实是一个常见的需求,可以帮助开发者在API层进行参数校验,提高代码的健壮性和安全性。以下是一个简单的例子,展示如何创建一个基本的请求参数验证中间件。
首先,安装koa-bodyparser
中间件,用于解析请求体中的JSON数据:
npm install koa-bodyparser
然后,创建一个验证中间件validate.js
:
const { validate } = require('joi');
const schema = {
body: {
name: Joi.string().required(),
age: Joi.number().integer().min(0).required()
}
};
module.exports = async (ctx, next) => {
try {
await validate(ctx.request.body, schema);
await next();
} catch (error) {
ctx.status = 400;
ctx.body = { error: error.details[0].message };
}
};
在Koa应用中使用这个中间件:
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const validate = require('./validate');
const app = new Koa();
app.use(bodyParser());
app.use(validate);
app.use(ctx => {
ctx.body = 'Request is valid!';
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
这个示例使用了joi
库来定义和验证请求体中的参数。如果参数不符合要求,中间件将返回400错误码及错误信息。希望这个示例对你有帮助!