位置: 编程技术 - 正文

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

  • 个人独资企业是否享受六税两费政策
  • 金蝶财务软件年末结账步骤
  • 一般纳税人销售农产品增值税税率
  • 主营业务成本的数据从哪里来的
  • 房地产一般纳税人扣除土地价款
  • 销售承兑现金会退回来吗
  • 增值税采用零税率政策的内容
  • 工资扣款做什么科目
  • 这个月只有进项没有销项
  • 自建厂房销售
  • 企业用银行存款购买原材料
  • 船运费发票抵扣多少税
  • 利润为负会计分录
  • 建筑业异地预缴税款的会计分录
  • 物业管理费什么时候交?
  • 跨年发票能否次年入账
  • 绿化企业所得税税率是多少
  • 录入凭证利息收入负数怎么录入?
  • 出口免抵退申报期限最新政策解读
  • 资产减值损失借方余额在利润表怎么填列
  • 小型微利企业在计提所得税时有哪些优惠政策
  • 付款网站制作
  • 新版edge浏览器兼容ie
  • 购买所有物品都是可以退货吗
  • Win10升级win11是激活状态吗?
  • win10桌面窗口管理器gpu占用高
  • php字符串变量
  • 单位话费谁负责交
  • 预收外汇会计分录
  • 会计凭证设计要注意的问题
  • PHP:imagecreatetruecolor()的用法_GD库图像处理函数
  • 企业上交财政款分录
  • win11升级正式版
  • javascript核心技术
  • 出口退税抵减应计入哪里
  • 政府奖励怎么做会计分录
  • 分公司需要做纳税申报吗
  • python中chr函数介绍
  • 入库时的会计分录
  • 一般纳税人增值税税率
  • 税务局退回来的钱账务处理
  • 一般纳税企业增值税的核算应当使用
  • 综合保税区可以随便进出吗
  • 无形资产出租如何入账
  • 预付费卡开票
  • 企业所得税应按季预缴,年末汇算清缴
  • sql server job
  • 电子承兑汇票承兑后几天到账
  • 什么叫做有限循环小数
  • 如何降低未分配利润的方法
  • 股票分红是怎么扣税的
  • 职工薪酬实际发生额忘记填会有风险吗
  • 两个独立核算单位可以共用一个账户吗
  • 评估价计入什么科目
  • 工资个税什么时候用综合所得公式计算
  • 普通发票可以改日期吗怎么改
  • 支付金额与实付金额不一致
  • 购买汽车的工本费如何入账
  • 迟到扣发工资
  • 赠送电影票文案
  • 报销招待费是什么意思
  • 打开与关闭光驱怎么设置
  • win2008远程桌面闪退
  • centos设置开机启动项
  • centos 命令大全
  • 联想随笔
  • iphone看mac
  • un_a.exe
  • rdclient怎么用win10怎么设置
  • win8系统的应用程序在哪里
  • win7系统开机后桌面黑屏
  • 启用win8 metro启动界面
  • shell脚本函数及传参
  • 阿里面试题和答案
  • net命令大全
  • django 软删除
  • 反编译android动态库
  • 国家税务局网上电子税务局官网天津
  • 稽查局积案清理工作成效显著
  • 水库淹没区耕地补偿标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设