自己实现 koa 中间件的 app.use 和 next 函数
下面是我自己简单实现了一下 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 函数相关推荐
- koa 接口返回数据_一文搞定 Koa 中间件实现原理
Koa是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小.更富有表现力.更健壮的基石. 通过利用 async 函数, Koa ...
- generator探幽(1)--koa中间件机制浅析
本系列旨在通过对co,koa等库源码的研究,进而理解generator在异步编程中的重大作用(ps:所有代码请在node --harmony或者iojs环境中运行) koa中间件的形式 相信用过koa ...
- Koa 中间件的执行
Node.js 中请求的处理 讨论 Koa 中间件前,先看原生 Node.js 中是如何创建 server 和处理请求的. node_server.js const http = require(&q ...
- 什么是koa中间件,他们的执行顺序是什么样的?
koa中间件 koa中,中间件分为应用级和路由级 //应用级 app.use(async (ctx, next) => { //应用级中间件 ,先执行中间件,再匹配路由console.log(& ...
- 深入理解 Koa 中间件之 “ 洋葱模型 ”
欢迎关注我的公众号『 前端我废了 』,查看更多文章!!! 前言 我们知道创建一个 Koa 应用主要分三步: const Koa = require('koa'); // 1. 创建一个 Koa 实例 ...
- 初识洋葱模型,分析中间件执行过程,浅析koa中间件源码
前言 作为洋葱模型的第一篇文章,这里仅介绍了一些入门级知识,比如 了解洋葱模型执行顺序 分析部分 koa 中间件的源码来加深对中间件的认识 为第二篇文章:分析洋葱模型实现原理,在自己项目中接入洋葱模型 ...
- Koa 中间件使用之 koa-jwt
Koa 中间件使用之 koa-jwt koa-jwt 是 koa 的一个验证 JSON Web Tokens 的中间件, 它可以将浏览器携带在请求里面的 token 获取出来进行验证, 并将验证之后的 ...
- 洋葱模型php,比较express与koa中间件模式的区别与联系
本篇文章主要介绍了详解express与koa中间件模式对比,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 起因 最近在学习koa的使用, 由于koa是相当基础的web框架 ...
- web前端技术分享:koa中间件是如何实现的?
在前端开发过程中我们可能会使用到koa中间件,但很多同学却不知道它是如何实现的,下面小千就来给大家介绍一下这个koa中间件(洋葱模型). 一.问题分析 async await是promise的语法糖, ...
最新文章
- php中连接两个值,php - 如何从两个表的连接中选择一个值? - SO中文参考 - www.soinside.com...
- 线程并发与进程并发各有什么you_操作系统问答题总结
- 2018python好找工作吗-2018年为什么要学习Python?Python还有前景吗?
- 【计算机网络】网络安全 : 报文鉴别 ( 密码散列函数 | 报文摘要算法 MD5 | 安全散列算法 SHA-1 | MAC 报文鉴别码 )
- step4 . day3 目录访问函数
- SAP Spartacus org unit list当前行is-current的判定逻辑
- 使用JDBC连接数据库时,SQL语句中提示:Unable to resolve table...(原因:数据源未配置)
- Final Michael Scofield
- 导致Oracle性能抖动的参数提醒
- OPenCV的中cvErode和cvDilate腐蚀和膨胀函数
- JavaScript:避免代码的重复执行
- 【习题 7-2 UVA-225】Golygons
- 关闭软件的同时,也关闭软件的进程
- iconfont-阿里巴巴矢量图标库使用教程
- 抖音短视频系统开发Service后台播放音乐实例
- 手机web字体css设置,手机web字体css怎么设置微软雅黑
- Photoshop菜单中英文对照表
- autojs脚本通用ui模板解决了一些已知问题
- 微信搭建本地开发测试环境
- 教你一个无本万利的赚钱方法_一个在股市中稳健赚钱的方法
热门文章
- mxnet保存模型,加载模型来预测新数据
- 线性代数的本质 - 02 - 线性组合、张成的空间与基
- python svm
- oracle创建定时任务
- 【11】nvjdc不能用以后另一种jd ck获取办法
- 你需要知道的MySQL开源存储引擎TokuDB
- java 控件内布局_Java开发桌面程序学习(二)————fxml布局与控件学习
- springboot 修改了端口不生效_Spring Boot 项目 Docker 化快速上手
- python是一种编译的编程语言_Python这种编程语言
- openssh无法登录:server responded algorithm negotiation failed”