位置: 编程技术 - 正文

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

  • 小规模纳税人代收水电费税率
  • 房产税纳税义务人
  • 太阳能发电开票编码
  • 免税发票是增值税发票吗
  • 租赁负债的计量
  • 香港保险代理人佣金
  • 增值税加计扣除是什么意思啊
  • 什么样的运输发动机最好
  • 委托加工的应税消费品收回后直接出售
  • 非独立核算的分公司如何报税
  • 私营企业实行固定税率
  • 进项税转出申报表能填负数吗
  • 贸易公司退税怎么做账
  • 可抵扣增值税的发票
  • 营改增后建筑公司账务处理
  • 分公司有法律效力吗
  • 总公司集中支付说明
  • 金融业保险业
  • 更正申报以前个税的处理方法
  • 小规模纳税人能抵扣进项发票吗
  • 商品流通企业代表企业
  • 广告制作费怎么入账
  • 补缴去年的社保怎么做账
  • 附有销售退回条款的递延所得税问题
  • 个税三险一金指什么意思
  • 劳务计提会计分录
  • 微信小程序实现页面跳转
  • Laravel 5.4中migrate报错: Specified key was too long error的解决
  • php socket select
  • 矿业财务好做吗
  • php加密文件解密
  • 海关滞报金可以税前扣除吗 江苏
  • 支付航天信息服务费怎么入账
  • php访问数据库的一般步骤
  • 毕业设计基于web难还是JAVA
  • 卷卷卷卷卷
  • python中切片用法
  • 劳务派遣差额征税的账务处理实例
  • arraylist源码分析1.8
  • 5年前开的发票退货可以冲红吗?
  • python中chr函数介绍
  • 不含税开发票吗
  • 其他应付款贷方正数表示什么意思
  • 哪些行业不适用税前加计扣除政策
  • 递延所得税怎么计算
  • 利润表中本期金额是什么意思
  • 广告制作交文化建设税吗
  • 开户套餐费是什么意思
  • 一年内到期的非流动负债计算公式
  • 折价或溢价摊销属于借款费用
  • 融资租赁首付款的性质
  • 企业弥补亏损的顺序
  • 非流动性资产有
  • 建设工程中设备计入包干价是否合法
  • 增值税结转到本年利润吗
  • SQL Server AlwaysOn读写分离配置图文教程
  • XP系统怎么调节屏幕亮度
  • win10预览版21277
  • win10任务栏位置怎么改变
  • win8笔记本无法更新正在撤销更改
  • win7更改磁盘分区
  • 如何去掉windows不是正版
  • Win10 mobile 10586.107升级后会出现哪些bug?
  • Node.js + Redis Sorted Set实现任务队列
  • Python中lambda的作用
  • js有while吗
  • bat中if语句的用法
  • IE下href 的 BUG问题
  • gimp批处理
  • 日历查询的算法怎么写
  • jq cookie
  • jquery做菜单
  • eclipse自动生成
  • 调查问卷的背景资料怎么写
  • 福建省税务局举报中心
  • 国税系统如何查询发票
  • 新加坡税务局电邮
  • 企业税收筹划的最终目的
  • 外地人在上海奉贤区买房需要什么条件
  • 如何进行税务筹划的方法
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设