位置: 编程技术 - 正文

node中koa中间件机制详解(node作为中间件做接口转发)

编辑:rootadmin

推荐整理分享node中koa中间件机制详解(node作为中间件做接口转发),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node中间层案例,node作为中间件做接口转发,node中间件是什么意思,nodejs 中间件,node什么是中间件,常用的第三方,node什么是中间件,常用的第三方,node 中间件,nodejs 中间件,内容如对您有帮助,希望把文章链接给更多的朋友!

koa

koa是由express原班人马打造的一个更小、更富有表现力、更健壮的web框架。

在我眼中,koa的确是比express轻量的多,koa给我的感觉更像是一个中间件框架,koa只是一个基础的架子,需要用到的相应的功能时,用相应的中间件来实现就好,诸如路由系统等。一个更好的点在于,express是基于回调来处理,至于回调到底有多么的不好,大家可以自行搜索来看。koa1基于的co库,所以koa1利用Generator来代替回调,而koa2由于node对async/await的支持,所以koa2利用的是async/await。关于async以及co库等,大家可以参考我之前写过的一篇文章(理解async)。koa可以说是一个各种中间件的架子,下面就来看一下koa对于中间件部分的实现:

koa1的中间件

koa1主要利用的是Generator来实现,一般来说,koa1的一个中间件大概是长这个样子的:

这样的输出会是1, 2, 3, 4, 5,koa的中间件的实现主要依靠的是koa-compose:

node中koa中间件机制详解(node作为中间件做接口转发)

源码非常的简单,实现的功能就是将所有的中间件串联起来,首先给倒数第一个中间件传入一个noop作为其next,再将这个整理后的倒数第一个中间作为next传入倒数第二个中间件,最终得到的next就是整理后的第一个中间件。说起来比较复杂,画图来看:

实现的效果如同上图,与redux需要实现的目标类似,只要遇到了yield next就去执行下一个中间件,利用co库很容易将这个流程串联起来,下面来简单模拟下,中间件完整的实现:

koa2的中间件

随着node对于async/await的支持,貌似不需要再借助于co这种工具库了,直接利用原生的就好,于是koa也做出了改变,来看目前的koa-compose:

koa-compose利用了Promise,koa2的中间件的参数也有一个变为了两个,而且执行下一个的中间件利用的是await next(),要达到与上面的示例代码的相同效果,需要更改中间件的写法:

如何做到兼容

可以看到的是,koa1与koa2对于中间件的实现还是有着很多的不同的,将koa1的中间件直接拿到koa2下面来使用肯定是会出现错误的,如何兼容这两个版本也成了一个问题,koa团队写了一个包来是koa1的中间件可以用于koa2中,叫做koa-convert,先来看看这个包怎么使用:

来看下这个包实现的思路:

个人感觉koa-convert的思路就是对Generator封装一层Promise,使上一个中间件可以利用await next()的方式调用,对于Generator的执行,利用co库,从而达到了兼容的目的。

标签: node作为中间件做接口转发

本文链接地址:https://www.jiuchutong.com/biancheng/380940.html 转载请保留说明!

上一篇:基于node.js之调试器详解(node.js gui)

下一篇:React+react-dropzone+node.js实现图片上传的示例代码

  • 关税完税价格是指什么意思
  • 查询一般纳税人资格证明
  • 工资怎么扣费
  • 2021年专项附加扣除必须要确认吗
  • 企业缴纳残疾人保证金按什么标准缴纳
  • 红冲发票跨年怎么操作
  • 期间费用包括哪三种
  • 土地转让缴纳增值税政策
  • 销售人员出差补助计入什么科目
  • 筹建期间有收入怎么办
  • 合同取消写什么
  • 免税企业以前年收入多少
  • 航天信息开票步骤
  • 印花税合同金额和结算金额不一致
  • 建筑业开具发票新规定
  • 物流公司承担货物损失赔偿如何写会计分录
  • 房产企业开发产品出租
  • 企业的利润分配顺序
  • 购入低值易耗品一批,实际成本4000元
  • 委托贷款是流动资金贷款吗
  • 增值税系统技术维护费需要勾选吗
  • 如何彻底删除QQ频道私信
  • 怎样启动powerpoint
  • 贷款贴息是什么政策
  • 企业预付保险费怎么做账
  • 认缴制没有实资本会怎么样
  • php代码封装成dll
  • linux基本命令有哪些
  • 自由职业者如何交五险一金
  • 一只草丛里的狐狸作文
  • 房地产企业增值税扣除土地成本
  • php socket编程
  • 一般纳税企业增值税计算
  • 企业所得税减免20%按5%征收
  • 股东出资未注明投资款可以通过验资报告处理么
  • 什么情况下要预提集装箱
  • 前后端交互用什么技术
  • php操作mysql数据库
  • background-size 之 背景图的尺寸设置
  • 民间非盈利组织会计要素组成
  • 辞退员工福利
  • 承兑汇票私人贴息双方都违法吗
  • 通过SQL Server 2008数据库复制实现数据库同步备份
  • 新成立小规模纳税人税收优惠政策
  • 企业哪些账户可以取现金
  • 财务费用应付利息
  • 什么是稳岗补贴呢
  • 小规模购进商品怎么做账
  • 个人出租不动产月租金不超10万免税
  • 应收账款周转率越大越好还是越小越好
  • 投标保证金会计科目
  • 建筑企业工程管理部职责
  • 个人开具发票需要税号吗?
  • 新会计准则会计科目明细表
  • 会务费入哪个科目
  • 价税分离怎么算
  • 新办企业必须经过什么核准登记
  • sql merge函数
  • mysql添加myini
  • windows server 2008 64位MySQL5.6免安装版本配置方法图解
  • linux opencl
  • win7不能复制文件怎么办
  • 交换机操作系统版本
  • cygwin在Windows8.1中设置ssh无密码登录
  • linux ifconfig命令详解
  • Windows 7 RTM、Vista、XP 性能测试
  • 英雄联盟支持win7
  • 自动备份文件并发送到Gmail (适用G级数据的备份)
  • Win10 RS1 14267 SDK版本发布下载
  • OpenGL ES Emulator比较
  • nodejs与springboot结合
  • Python的flask框架教程
  • 如何使用开塞露排便
  • unity 设置物体角度
  • 安卓模拟器错误怎么办
  • 蛋哥的日常
  • jquery基础知识梳理
  • 国税局和税务局合并
  • 员工的生育津贴计入工资总额吗
  • 房屋维修基金会计分录处理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设