目录

koa2中间件

# koa2 中间件

提示

本教程是在koa中文网 (opens new window)文档的学习和总结

# 一、什么是Koa的中间件

通俗的讲:中间件就是匹配路由之前或者匹配路由完成做的一系列的操作,我们就可以把它叫做中间件。

在express中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处理请求-响应循环流程中的中间件,一般被命名为 next 的变量。在Koa中中间件和express有点类似。

中间件的功能包括:

执行任何代码。 修改请求和响应对象。 终结请求-响应循环。 调用堆栈中的下一个中间件。

如果我的get、post回调函数中,没有next参数,那么就匹配上第一个路由,就不会往下匹配了。如果想往下匹配的话,那么需要写next()

# 二、为什么使用中间件

  • 拆分业务模块,使代码清晰
  • 统一使用中间件,使得各业务代码都规范标准
  • 扩展性好,易添加、易删除.

# 三、Koa应用可使用如下几种中间件:

  1. 应用级中间件
  2. 路由级中间件
  3. 错误处理中间件
  4. 第三方中间件

# 1.应用级中间件

const Koa = require('koa');
const Router = require('koa-router');

const app = new Koa();
const router = new Router();
app.use(async (ctx,next)=>{
	console.log(new Date());
	await next();
})
router.get('/', function (ctx, next) {
	ctx.body="Hello koa";
})
router.get('/news',(ctx,next)=>{
	ctx.body="新闻页面"
});
app.use(router.routes()); //作用:启动路由
app.use(router.allowedMethods()); //作用: 当请求出错时的处理逻辑
app.listen(3000,()=>{
	console.log('starting at port 3000');
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 2、路由中间件

router.get('/', async(ctx, next)=>{
	console.log(1)
	next()
})
router.get('/', function (ctx) {
	ctx.body="Hello koa";
})
1
2
3
4
5
6
7

# 3、错误处理中间件

app.use(async (ctx,next)=> {
	next();
	if(ctx.status==404){
	ctx.status = 404;
	ctx.body="这是一个404页面"
}
});
1
2
3
4
5
6
7

# 4、第三方中间件

const static = require('koa-static'); 
	const staticPath = './static'; 
	app.use(static(
	path.join( __dirname, staticPath)
)) 



const bodyParser = require('koa-bodyparser');
app.use(bodyParser());
1
2
3
4
5
6
7
8
9
10

# 四、koa2业务代码都是中间件

  • app.use(..)都属于中间件, 所有的请求都会经过中间件
  • 路由也是中间件,只有满足路由规则才会进入这个中间件

# 五、中间件规则

不管是什么类型的中间件(路由的或者自定义的),它都是一个async函数。async函数的第一个参数是ctx,第二个参数是next。

# 六、模拟登陆 中间件

app.js中添加中间件逻辑代码

app.use(async(ctx, next) => {
        const query = ctx.query
        if (query.user === 'zhangsan') {
            // 模拟登陆成功
            await next() // 执行下一个重甲件
        } else {
            // 登陆失败
            ctx.body = "请登录"
        }
    })
1
2
3
4
5
6
7
8
9
10

# 七、Koa中间件的执行顺序

Koa 的中间件和 Express 不同,Koa 选择了洋葱圈模型。

img

上次更新: 2023/09/05 17:45:42
最近更新
01
关于我
07-14
02
科学上网
11-15
03
OSS+CDN
09-23
更多文章>
极昼青春
买辣椒也用券