多个koa中间件执行顺序-阿里云开发者社区

开发者社区> 数据库> 正文

多个koa中间件执行顺序

简介: 多个中间件执行顺序 多个中间件会形成一个栈结构(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);

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章