koa中间件

1.logger
koa一个重要设计就是中间件,首先先看logger打印日志的功能。

console.log(`${Date.now()} ${ctx.request.method} ${ctx.request.url}`)
也可以拆分独立函数
const logger=(ctx,next)=>{
  console.log(`${Date.now()} ${ctx.request.method} ${ctx.request.url}`);
  next();
}

中间件就是在request和response请求之间实现中间功能。
app.use来加载中间件,其中中间件默认接收两个参数,第一个是context对象,第二个是next函数,调用next函数,就可以把执行权转交给下一个中间件。
2.中间件栈
多个中间件形成栈结构,先进后出。

1.最外层的中间件首先执行。
2.调用next函数把执行权交给下一个中间件。
3.最内层的中间件最后执行
4.执行结束执行权交给上一层中间件
5.最外层中间件收回执行权后,执行next函数之后的代码。

const one = (ctx, next) => {
  console.log('>> one');
  next();
  console.log('<< one');
}

const two = (ctx, next) => {
  console.log('>> two');
  next(); 
  console.log('<< two');
}

const three = (ctx, next) => {
  console.log('>> three');
  next();
  console.log('<< three');
}

app.use(one);
app.use(two);
app.use(three);
输出:
>> one
>> two
>> three
<< three
<< two
<< one
即先执行最外层one,执行到最内层,再执行最能层代码,最后最外层one收回执行权。
如果把two的next注释:
>> one
>> two
<< two
<< one
执行到two没有next因此不再执行。

3.异步中间件
异步中间件必须携程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);

中间件必须携程async函数,fs.readFile是异步操作必须携程await

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 上次看到了koa-compose的代码,今天来说一下koa中间件的级联以及工作原理。 中间件工作原理 初始化...
    ITgecko阅读 12,090评论 1 3
  • 一、概念 Koa 应用程序是一个包含一组中间件函数的对象。 1. async和await在koa中使用关键词 as...
    klmhly阅读 9,975评论 0 3
  • 前言 原文地址 最近几天花了比较长的时间在koa(1)的源码分析上面,初次看的时候,�被中间件执行那段整的晕乎乎的...
    谦龙阅读 5,439评论 0 9
  • 一、什么是 Koa 的中间件 通俗的讲:中间件就是匹配路由之前或者匹配路由完成做的一系列的操作,我们就可以把它叫做...
    zJ_16阅读 4,042评论 0 0
  • 说起Node,最常用的估计就是express和koa,两者都用到了中间件(middleware)这一概念,主要用于...
    慕容跳凯阅读 10,104评论 0 4

友情链接更多精彩内容