多个koa中间件执行顺序

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 多个中间件执行顺序多个中间件会形成一个栈结构(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);
目录
相关文章
|
8月前
|
前端开发 JavaScript 中间件
78 # koa 中间件的实现
78 # koa 中间件的实现
24 0
|
8月前
|
前端开发 中间件
77 # koa 中间件的应用
77 # koa 中间件的应用
26 0
|
1月前
|
资源调度 JavaScript 前端开发
koa常用中间件
koa常用中间件
26 0
|
JSON 缓存 前端开发
koa 中间件
在写一个服务端应用的时候,一般都会使用到作为静态服务器,node 搭建静态服务请查看我以前文章,express中间件实现静态资源服务的话可以使用 express.static()来实现,那么koa如何实现呢? 其实对于一个静态服务的话,只要你会node这个底层的原理,express 或者 koa 这些上层应用都是基于底层原理来的
koa 中间件
|
中间件
Koa 中间件
Koa 中间件
121 1
Koa 中间件
|
JavaScript 前端开发 中间件
尝试理解 Koa、Redux middleware 的演进过程
最近开发 web 端,用的是 Egg node.js 框架,期间实现的一些功能例如:权限检测、操作日志上报等都是基于框架的 middleware 机制件完成的。虽然最后完成了功能,但其实对中间件真正的实现机制、运行时序还不能做到完全的理解。 Egg 是基于 Koa 实现的,Koa 的代码量非常少,加起来也就 1000 多行,涉及到中间件核心的部分,也就不到 100 行,如果有耐心可以直接读
71 0
|
JavaScript 前端开发 中间件
尝试理解 Koa、Redux middleware 的演进过程
最近开发 web 端,用的是 Egg node.js 框架,期间实现的一些功能例如:权限检测、操作日志上报等都是基于框架的 middleware 机制件完成的。虽然最后完成了功能,但其实对中间件真正的实现机制、运行时序还不能做到完全的理解。
87 0
|
24天前
|
消息中间件 存储 NoSQL
阿里开源中间件一览
阿里开源中间件一览
26 2
|
1月前
|
算法 NoSQL Java
2023年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)
|
10月前
|
NoSQL Java Redis
阿里Java高级岗中间件二面:GC+IO+JVM+多线程+Redis+数据库+源码
虽然“钱多、事少、离家近”的工作可能离技术人比较远,但是找到一份合适的工作,其实并不像想象中那么难。但是,有些技术人确实是认真努力工作,但在面试时表现出的能力水平却不足以通过面试,或拿到高薪,其实不外乎以下 2 个原因: