下面是我自己简单实现了一下 koa 的中间件运行函数

//实现一个 koa 的函数function app() {}app.prototype.ctx = {name: "123",
};app.prototype.callBack = [];const next = async function () {this.MiddleWareNum++;if (this.callBack[this.MiddleWareNum]) {await this.callBack[this.MiddleWareNum]();}
};app.prototype.use = async function (callBack) {this.callBack.push(async () => {await callBack(this.ctx, next.bind(this));});
};app.prototype.run = async function () {this.MiddleWareNum = 0;let func = this.callBack[0];await func();
};let instance = new app();instance.use(async (ctx, next) => {console.log("11111:", ctx);await next();console.log("4444");
});instance.use(async (ctx, next) => {console.log("2222:", ctx);await next();console.log("333");
});instance.run();

这里需要注意的是:
如果把 next 绑定在 app.prototype 上面,那么在
await callBack(this.ctx, next.bind(this));
这行代码中改成
await callBack(this.ctx,this.next)

那么 next 函数中的 this 指针会指向 global 。因为如果把构造函数的 prototype 上的函数单独提取出来,然后再运行时,函数里面的 this 指针会从原本的指向实例到全局变量。

自己实现 koa 中间件的 app.use 和 next 函数相关推荐

  1. koa 接口返回数据_一文搞定 Koa 中间件实现原理

    Koa是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小.更富有表现力.更健壮的基石. 通过利用 async 函数, Koa ...

  2. generator探幽(1)--koa中间件机制浅析

    本系列旨在通过对co,koa等库源码的研究,进而理解generator在异步编程中的重大作用(ps:所有代码请在node --harmony或者iojs环境中运行) koa中间件的形式 相信用过koa ...

  3. Koa 中间件的执行

    Node.js 中请求的处理 讨论 Koa 中间件前,先看原生 Node.js 中是如何创建 server 和处理请求的. node_server.js const http = require(&q ...

  4. 什么是koa中间件,他们的执行顺序是什么样的?

    koa中间件 koa中,中间件分为应用级和路由级 //应用级 app.use(async (ctx, next) => { //应用级中间件 ,先执行中间件,再匹配路由console.log(& ...

  5. 深入理解 Koa 中间件之 “ 洋葱模型 ”

    欢迎关注我的公众号『 前端我废了 』,查看更多文章!!! 前言 我们知道创建一个 Koa 应用主要分三步: const Koa = require('koa'); // 1. 创建一个 Koa 实例 ...

  6. 初识洋葱模型,分析中间件执行过程,浅析koa中间件源码

    前言 作为洋葱模型的第一篇文章,这里仅介绍了一些入门级知识,比如 了解洋葱模型执行顺序 分析部分 koa 中间件的源码来加深对中间件的认识 为第二篇文章:分析洋葱模型实现原理,在自己项目中接入洋葱模型 ...

  7. Koa 中间件使用之 koa-jwt

    Koa 中间件使用之 koa-jwt koa-jwt 是 koa 的一个验证 JSON Web Tokens 的中间件, 它可以将浏览器携带在请求里面的 token 获取出来进行验证, 并将验证之后的 ...

  8. 洋葱模型php,比较express与koa中间件模式的区别与联系

    本篇文章主要介绍了详解express与koa中间件模式对比,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 起因 最近在学习koa的使用, 由于koa是相当基础的web框架 ...

  9. web前端技术分享:koa中间件是如何实现的?

    在前端开发过程中我们可能会使用到koa中间件,但很多同学却不知道它是如何实现的,下面小千就来给大家介绍一下这个koa中间件(洋葱模型). 一.问题分析 async await是promise的语法糖, ...

最新文章

  1. php中连接两个值,php - 如何从两个表的连接中选择一个值? - SO中文参考 - www.soinside.com...
  2. 线程并发与进程并发各有什么you_操作系统问答题总结
  3. 2018python好找工作吗-2018年为什么要学习Python?Python还有前景吗?
  4. 【计算机网络】网络安全 : 报文鉴别 ( 密码散列函数 | 报文摘要算法 MD5 | 安全散列算法 SHA-1 | MAC 报文鉴别码 )
  5. step4 . day3 目录访问函数
  6. SAP Spartacus org unit list当前行is-current的判定逻辑
  7. 使用JDBC连接数据库时,SQL语句中提示:Unable to resolve table...(原因:数据源未配置)
  8. Final Michael Scofield
  9. 导致Oracle性能抖动的参数提醒
  10. OPenCV的中cvErode和cvDilate腐蚀和膨胀函数
  11. JavaScript:避免代码的重复执行
  12. 【习题 7-2 UVA-225】Golygons
  13. 关闭软件的同时,也关闭软件的进程
  14. iconfont-阿里巴巴矢量图标库使用教程
  15. 抖音短视频系统开发Service后台播放音乐实例
  16. 手机web字体css设置,手机web字体css怎么设置微软雅黑
  17. Photoshop菜单中英文对照表
  18. autojs脚本通用ui模板解决了一些已知问题
  19. 微信搭建本地开发测试环境
  20. 教你一个无本万利的赚钱方法_一个在股市中稳健赚钱的方法

热门文章

  1. mxnet保存模型,加载模型来预测新数据
  2. 线性代数的本质 - 02 - 线性组合、张成的空间与基
  3. python svm
  4. oracle创建定时任务
  5. 【11】nvjdc不能用以后另一种jd ck获取办法
  6. 你需要知道的MySQL开源存储引擎TokuDB
  7. java 控件内布局_Java开发桌面程序学习(二)————fxml布局与控件学习
  8. springboot 修改了端口不生效_Spring Boot 项目 Docker 化快速上手
  9. python是一种编译的编程语言_Python这种编程语言
  10. openssh无法登录:server responded algorithm negotiation failed”