位置: 编程技术 - 正文

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实现图片上传的示例代码

  • 专项扣除三险一金为0
  • 汇算清缴可以调成本吗
  • 出口货物退运管理办法
  • 咨询费成本怎么成本结转
  • 折扣为负数是什么意思
  • 折让方式
  • 贷款公司收取服务费是诈骗吗
  • 基本存款账户能向银行借款吗
  • 教资认定流程详细步骤2023
  • 股东分红纳入社会保险吗
  • 企业会计准则规定我国企业的会计期间按年度划分
  • 超市收取的返利的税收处理
  • 应收账款的借方负数表示什么
  • 车辆购置税如何做账
  • 专项储备属于利润分配吗
  • 发票冲红后多交多少税
  • 待处理财产损益期末结转到哪里
  • 事业单位净资产怎么计算?净资产怎么算
  • 付企业网银年服费怎么付
  • 以前年度损益申报怎么报所得税
  • win10电脑键盘灵敏度怎么调
  • 公司流水账是会计做吗
  • 企业会计制度政府补助
  • 白醋洗脸有什么好处
  • 防伪税控开票系统技术维护费
  • 银行本票实际金额小于票面金额
  • 装win7提示失败怎么办
  • 房地产会计核算地上地下成本分摊
  • h5能不能自动播放
  • c#openxml
  • vue中如何使用axios
  • php模板教程
  • php foreach as
  • php重定向伪造referer
  • thinkphp框架的作用
  • 单目测距精度
  • 城建税减征50%
  • vue实例教程
  • vue router-view路由详解
  • 微信小程序开发一个多少钱
  • web前端开发html代码
  • php如何做app
  • 没进项发票怎么办
  • 微信转账和支付宝转账的区别
  • phpcms视频教程
  • DEDECMSV5.6将软件下载次数直接生成静态
  • 利息收入计入借方
  • sql服务无法启动 3417
  • 个人转让房产税率
  • 逃税是什么意思?
  • 管理费用借方贷方
  • 税盘进项税额怎么做
  • 车船税没有发票可以入账吗
  • 存货科目计算公式是什么
  • 营改增有什么好处
  • 迟到扣发工资
  • 小规模纳税企业在应交增值税明细科目
  • 购买税盘全额抵扣会计分录
  • 咨询服务费如何合理避税
  • 社保系统个人信息
  • 卖出去的货没有发票怎么给人家解释
  • 游戏与操作系统不兼容
  • 进程管理器命令
  • keyword是啥
  • paytime.exe - paytime是什么进程 有什么用
  • cs1.6 linux
  • win8怎么没有无线网图标不见了
  • Windows 7+Fedora 16启动项问题讲解
  • win10系统自带虚拟机怎么用
  • perl教程 pdf
  • shell脚本字符串换行
  • opengl shader实例
  • mono为什么不能用了
  • 自动搜索工具
  • 简单的比较
  • 真机调试什么意思
  • 收到红字信息表不能直接开具
  • 济南税务局电话是多少
  • 境外服务收入如何纳税
  • 海关进口增值税怎么认证抵扣
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设