位置: 编程技术 - 正文

详解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搭建服务器)

  • 子女继承父母房产最新政策2023
  • 往年有亏损本年没有亏损
  • 总分公司报税有哪些注意事项
  • 租土地使用权建房
  • 结构性存款现金流量表如何分类
  • 技术服务税率是多少 现金
  • 计提个人部分保险
  • 应付职工薪酬包括哪些内容
  • 红字发票是否要修改往期申报表
  • 集团内部是什么意思
  • 税控盘费用抵减增值税
  • 出差补贴是否缴纳个人所得税 北京
  • 股东投资款印花税多少
  • 预缴企业所得税怎么做会计分录
  • 现金流量表编制依据和方法
  • 筹建期员工社保分录
  • 代销返还
  • 木制手链品种
  • 税前扣除是好事吗
  • 企业买的商业保险退款怎么做账
  • 1697510586
  • 1697510614
  • 服务器研发属于什么行业
  • 没收的定金 会计分录
  • 外贸公司进出口权办理流程
  • 工资薪金所得包括差旅费津贴吗
  • php apc
  • win10的病毒隔离有用吗
  • sgbhp.exe - sgbhp是什么进程 有什么用
  • 公司卖旧车税务处理流程
  • php获取扩展名的几种方法
  • 房产税会计科目有哪些
  • 企业成立多久可以注销
  • 超级本轻薄本
  • 生产型企业出口退税计算案例
  • 解决掉发的有效方法
  • photo-sphere-viewer中文文档
  • 劳务派遣申报表附表一怎么填
  • 凭样品销售
  • 投资款超过实收资本会计处理
  • 实际缴纳的增值税用哪个科目
  • 一直暂估原材料有什么风险
  • 什么情况下要去y加ies
  • 资产负债表应付职工薪酬是负数是什么原因
  • 新政府会计制度下的基建会计
  • 即征即退增值税需要缴纳所得税吗
  • 个人所得税能说明什么
  • 中小企业所得税优惠
  • 什么叫总分类账簿
  • 以房抵债会计分录怎么做
  • 少数股东权益贷方表示什么意思
  • 银行承兑的购买
  • 购入无形资产属于资产吗
  • 如何理解预付年金终值期数和系数和记忆方法
  • 安全生产费的使用包括
  • 代销货物收取手续费计入
  • 接受其他企业现金捐赠会计分录
  • 如何关闭系统快捷键
  • 打印机向windows发送消息
  • 破解xp系统密码
  • vssvc.exe
  • 如何在windows里保存画过的画
  • win10微软在哪
  • WIN7系统如何设置自动关机
  • 怎么修改抖音号
  • linux必不可少的分区
  • Linux系统怎么用FTP传文件
  • unity获取组件的方法
  • unity xcode
  • shell输出1到100
  • 仿淘宝源码
  • jquery动态创建元素
  • 使用应用程序的好处
  • python对比go
  • 湖北生育登记网上服务大厅官网查询
  • 支付宝中油好客e站怎么开发票
  • 纳税信用d级企业保留几年
  • 所得税的核定征收方法
  • 购车绿本是什么样的?
  • 18个税种征税范围
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设