[分享]Nodejs Koa 请求参数验证 Middleware

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

[分享]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错误码及错误信息。希望这个示例对你有帮助!

回到顶部