位置: 编程技术 - 正文

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

  • 购物税费怎么算
  • 契税计税依据及税率
  • 计入固定资产和其他资产
  • 事业单位申请电采暖电表免费么新疆昌吉
  • 管理费用中税金分录怎么写
  • 社保缴费基数什么意思
  • 增值税普通发票需要交税吗
  • 小额贷款业务涉及哪些法律
  • 发票失控怎么处罚
  • 应交税费进项税额属于什么科目借贷方向
  • 个人转让不动产给个人独资企业
  • 外贸企业0退税率的账务处理
  • 工资扣款的规定
  • 税务系统出问题怎么办
  • 电费发票勾选是啥意思
  • 一般纳税人有哪些费用
  • 以旧换新的销售方式怎样确定销售额
  • 提供建筑服务应在发票备注栏注明
  • 视同销售产品与收款尾差怎么处理
  • 家电折旧费法律依据
  • 分公司银行开户需要章程吗
  • 给客户退差价怎么说
  • 分公司筹备方案
  • 投入资本公积需要结转吗
  • 小企业补贴收入怎么做账
  • 增值税留抵税额在借方还是贷方
  • 企业所得税申报错误怎么更改
  • 缴纳当月增值税30000元
  • 预收款退回怎么写分录
  • 股票收益的计算公式
  • typora修改背景颜色
  • php与jquery
  • php上传图片大小限制
  • 董事会会费应计什么科目
  • 数据结构考试内容
  • php实现登录功能
  • php面向对象是什么意思
  • javascripts
  • nbtstat命令的用法
  • 房地产销售未完工产品转完工产品确认的销售收入
  • 帝国cms设置获取IP字段
  • 承包安装工程活怎么接
  • 优先股可转让吗
  • 期货收入交个人所得税吗
  • 英文好书推荐
  • ubuntu系统安装教程
  • 织梦内容页模板修改
  • 业务招待费进项税额转出会计分录
  • 认缴制下,资金什么时候必须到位
  • 红字发票与作废发票验旧
  • 开票内容不在经营范围内
  • 房地产开发公司注册资金要求
  • 对于在某一时点履行的履约义务,企业应当在客户
  • 商贸企业增值税税率是多少
  • 员工自动辞职有工龄工资吗
  • 建筑企业成本核算方法
  • 公司给别人公司过账应该注意哪些
  • 原材料采用实际成本法,在会计核算上应设置的账户是
  • 去税局购买税盘要注意什么
  • 小规模公司用什么成本核算方法
  • 出库单上面的单位写谁的
  • 如何计算技术转让所得
  • 收到存款利息收入用什么凭证
  • 财务费用科目期末结转损益后应
  • mysql关联语句
  • win10预览版怎么样
  • WP8版Creative Camera:相机详情介绍(图文)
  • 安装系统需要什么工具
  • 系统死锁或资源管理器崩溃时让xp系统自动重启的方法
  • zzs.exe是病毒吗
  • win8 桌面图标
  • explore是什么文件
  • android怎么样
  • tree 怎么用
  • python简单gui
  • unity camera fov
  • java 视频教程
  • 中建七局企业精神是什么
  • 中药生产与加工和中药制药技术区别
  • 国税年收入
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设