多个koa中间件执行顺序

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 多个中间件执行顺序多个中间件会形成一个栈结构(middle stack),以"先进后出"(first-in-last-out)的顺序执行。最外层的中间件首先执行。

多个中间件执行顺序

多个中间件会形成一个栈结构(middle stack),以"先进后出"(first-in-last-out)的顺序执行。

  1. 最外层的中间件首先执行。
  2. 调用next函数,把执行权交给下一个中间件。
    ...
  3. 最内层的中间件最后执行。
  4. 执行结束后,把执行权交回上一层的中间件。
    ...
  5. 最外层的中间件收回执行权之后,执行next函数后面的代码。请看下面的例子
const Koa = require("koa");
const app = new Koa();

let arr;
// 第一个中间件
app.use(async (ctx, next) => {
  arr = [];
  arr.push(1);
  await next();
  arr.push(2);
});

// 第二个中间件
app.use(async (ctx, next) => {
  arr.push(3);
  await next();
  arr.push(4);
});

// 第三个中间件
app.use(async (ctx, next) => {
  arr.push(5);
  await next();
  arr.push(6);
});

// 输出
app.use(async ctx => {
  arr.push(7);
  ctx.body = arr;
});

app.listen(3000, () => {
  console.log("server start at http://127.0.0.1:3000");
});
// 最后方法 http://127.0.0.1 的结果就得到 [1,3,5,7,6,4,2]

异步中间件

如果有异步操作(比如读取数据库),中间件就必须写成 async 函数。请看下面的例子。

const fs = require('fs.promised');
const Koa = require('koa');
const app = new Koa();

const main = async function (ctx, next) {
  ctx.response.type = 'html';
  ctx.response.body = await fs.readFile('./demos/template.html', 'utf8');
};

app.use(main);
app.listen(3000);
目录
相关文章
|
前端开发 JavaScript 中间件
78 # koa 中间件的实现
78 # koa 中间件的实现
47 0
|
前端开发 中间件
77 # koa 中间件的应用
77 # koa 中间件的应用
35 0
|
6月前
|
资源调度 JavaScript 前端开发
koa常用中间件
koa常用中间件
56 0
|
JSON 缓存 前端开发
koa 中间件
在写一个服务端应用的时候,一般都会使用到作为静态服务器,node 搭建静态服务请查看我以前文章,express中间件实现静态资源服务的话可以使用 express.static()来实现,那么koa如何实现呢? 其实对于一个静态服务的话,只要你会node这个底层的原理,express 或者 koa 这些上层应用都是基于底层原理来的
koa 中间件
|
中间件
Koa 中间件
Koa 中间件
138 4
Koa 中间件
|
JavaScript 前端开发 中间件
尝试理解 Koa、Redux middleware 的演进过程
最近开发 web 端,用的是 Egg node.js 框架,期间实现的一些功能例如:权限检测、操作日志上报等都是基于框架的 middleware 机制件完成的。虽然最后完成了功能,但其实对中间件真正的实现机制、运行时序还不能做到完全的理解。 Egg 是基于 Koa 实现的,Koa 的代码量非常少,加起来也就 1000 多行,涉及到中间件核心的部分,也就不到 100 行,如果有耐心可以直接读
91 0
|
JavaScript 前端开发 中间件
尝试理解 Koa、Redux middleware 的演进过程
最近开发 web 端,用的是 Egg node.js 框架,期间实现的一些功能例如:权限检测、操作日志上报等都是基于框架的 middleware 机制件完成的。虽然最后完成了功能,但其实对中间件真正的实现机制、运行时序还不能做到完全的理解。
100 0
|
中间件 Python 开发者
Django中间件执行顺序
中间件 Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
1563 4
|
5月前
|
消息中间件 存储 中间件
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
1390 0
|
4月前
|
消息中间件 编解码 Docker
Docker部署RabbitMQ消息中间件
【7月更文挑战第4天】Docker部署RabbitMQ消息中间件
275 3