位置: 编程技术 - 正文

详解express与koa中间件模式对比(koa和express的区别)

编辑:rootadmin

推荐整理分享详解express与koa中间件模式对比(koa和express的区别),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:express和koa2的区别,express和node的关系,express与koa的区别,express和impress,express和node的关系,express和node的关系,express与koa的区别,express与explain,内容如对您有帮助,希望把文章链接给更多的朋友!

起因

最近在学习koa的使用, 由于koa是相当基础的web框架,所以一个完整的web应用所需要的东西大都以中间件的形式引入,比如koa-router, koa-view等。在koa的文档里有提到:koa的中间件模式与express的是不一样的,koa是洋葱型,express是直线型,至于为什么这样,网上很多文章并没有具体分析。或者简单的说是async/await的特性之类。先不说这种说法的对错,对于我来说这种说法还是太模糊了。所以我决定通过源码来分析二者中间件实现的原理以及用法的异同。

为了简单起见这里的express用connect代替(实现原理是一致的)

用法

二者都以官网(github)文档为准

connect

下面是官网的用法:

根据文档我们可以看到,connect是提供简单的路由功能的:

connect的中间件是线性的,next过后继续寻找下一个中间件,这种模式直觉上也很好理解,中间件就是一系列数组,通过路由匹配来寻找相应路由的处理方法也就是中间件。事实上connect也是这么实现的。

app.use 就是往中间件数组中塞入新的中间件。中间件的执行则依靠私有方法 app.handle 进行处理,express也是相同的道理。

koa

相对connect,koa的中间件模式就不那么直观了,借用网上的图表示:

详解express与koa中间件模式对比(koa和express的区别)

也就是koa处理完中间件后还会回来走一趟,这就给了我们更加大的操作空间,来看看koa的官网实例:

很明显,当koa处理中间件遇到await next()的时候会暂停当前中间件进而处理下一个中间件,最后再回过头来继续处理剩下的任务,虽然说起来很复杂,但是直觉上我们会有一种隐隐熟悉的感觉:不就是回调函数吗。这里暂且不说具体实现方法,但是确实就是回调函数。跟async/await的特性并无任何关系。

源码简析

connect与koa中间件模式区别的核心就在于next的实现,让我们简单看下二者next的实现。

connect

connect的源码相当少加上注释也就来行,看起来也很清楚,connect中间件处理在于proto.handle这个私有方法,同样next也是在这里实现的

删掉混淆的代码后 我们可以看到next实现也很简洁。一个递归调用顺序寻找中间件。不断的调用next。代码相当简单但是思路却很值得学习。

其中 done 是第三方处理方法。其他处理sub app以及路由的部分都删除了。不是重点

koa

koa将next的实现抽离成了一个单独的包,代码更加简单,但是实现了一个貌似更加复杂的功能

看着上面处理过的的代码 有些同学可能还是会不明觉厉。

那么我们继续处理一下:

这样一来 程序更加简单了 跟async/await也没有任何关系了,让我们看下结果好了

执行上面的程序我们可以发现依次输出:

foo1bar1qux1qux2bar2foo2

同样是所谓koa的洋葱模型,到这里我们就可以得出这样一个结论:koa的中间件模型跟async或者generator并没有实际联系,只是koa强调async优先。所谓中间件暂停也只是回调函数的原因(在我看来promise.then与回调其实没有什么区别,甚至async/await也是回调的一种形式)。

标签: koa和express的区别

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

上一篇:使用Node.js实现简易MVC框架的方法(使用nodejs实现简单的局域网聊天功能)

下一篇:详解用node搭建简单的静态资源管理器(如何用node搭建服务器)

  • 缓交的社保费,包括个人部分
  • 公司报销房租还能扣税吗
  • 资产负债表其他应付款计算公式
  • 增值税专用发票抵扣期限
  • 隔月发票可以作废吗?
  • 报销餐费有增值税吗
  • 对外贸易出口公司
  • 代收电费可以开发票吗
  • 营改增后房地产开发税费一览表
  • 营改增后工业企业税率是多少?
  • 劳务公司注销了,未出的款怎么走账
  • 在产品,产成品和库存商品的区别
  • 试营业生产的样品怎么做账?
  • 企业所得税纳税申报表
  • 季度报税过了怎么办
  • 一般纳税人兼营不同税率的货物或应税劳务
  • 小规模购进商品只收到记账联专票
  • 未开发的土地被司法查封,自然资源局可以收回吗
  • 顺丰充值的钱可以退吗
  • 怎么用老毛桃u盘装win7系统 老毛桃u盘装win7系统教程图解
  • 经营租入的设备能够确认为资产吗
  • 铁路货物运输代理
  • 收到发票后补付什么意思
  • 股权投资借差
  • macOS 11 Big Sur 开发者预览版 Beta 8推送
  • windows7使用方法
  • 企业合并按合并的法律形式分类
  • 福利企业增值税优惠政策
  • 完工产品成本怎么分配
  • 企业所得税申报流程
  • yii框架的优点及原理
  • detr训练自己的数据集
  • vue路由的理解
  • 销项负数发票需要入账吗
  • 注册公司填写从业人数多少合适
  • 差旅费住宿专票可以抵扣吗
  • 累计折旧大白话
  • 安全文明措施费费率一般为多少
  • 税控会计分录
  • 实缴的钱注销后可以拿回来吗
  • 资产负债表中应交税费为负数是什么意思
  • 保证人不承担责任的情形(上)
  • 预缴所得税年底处理账务吗
  • 个税出现负数是什么意思
  • 减免增值税记账
  • db2数据库管理的工具
  • mysql load local
  • 企业中间投入
  • 平均资产总额与资产总额的关系
  • 计提环保税的会计分录
  • 机票差额发票和全额发票的区别
  • 产品的质量监督部门是指
  • 补贴费用申请书怎么写
  • 附加税减免政策2023
  • 委托加工应税消费品纳税义务发生时间
  • 开的发票超过了限额会怎样,怎么办?
  • 公司软件使用制度
  • 工资表明细表
  • 教育费附加免征文件
  • 购买需要安装的生产设备会计分录
  • 服务业差旅费是什么科目
  • 期间费用包括哪三种
  • SqlServer 2000、2005分页存储过程整理第1/3页
  • oracle序列修改初始值
  • mysql5.5安装配置教程
  • sqlserver 复制表 保留默认值
  • sqlserver远程连接设置
  • 分页存储过程包括
  • freebsd怎么用
  • 介绍两个很常用的成语
  • 怎么修改win10登录名
  • centos 搜索
  • win8.1删除所有内容并重新安装
  • win8.1开机自启项目在哪里
  • sendmail邮件服务器在虚拟机的哪个位置
  • linux用root登录
  • Android属性动画缩放
  • 企业所得税计算器在线计算
  • 浙江省国家税务局总局官网
  • 企业税务情况查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设