位置: 编程技术 - 正文

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

  • 税控盘的维护费
  • 运费增值税税率有5吗
  • 公司注销了账本还需保留吗
  • 政府会计制度等式
  • 服务不动产和无形资产扣除项目本期实际扣除金额
  • 个体工商户开普票限额最新规定
  • 股东退股如何清算盈亏
  • 买手机手续费怎么算
  • 购买车间使用的设备计入什么
  • 第二季度纳税申报
  • 国有企业党组织工作应遵循的原则包括
  • 购置办公用品有什么好处
  • 收到合同款
  • 事业单位经营结余为负数的原因
  • 收到小额贷款怎么做账
  • 工资扣除水电费扣个税
  • 个体工商户个人所得税怎么计算
  • 企业开普票和专票的税率一样吗
  • 公司一年未经营怎么赔偿
  • 医疗器械 税点
  • 中国公司可以给境外公司开发票吗
  • 代购商品委托书怎么写
  • 报销款冲抵其他应收款怎么做账?
  • 融资租赁抵押车辆逾期收车
  • 企业稀释股份
  • 股权并购和资产的关系
  • 建安行业简易计税可以抵扣吗
  • 非居民企业间接转让中国应税财产
  • 机动车抵扣联是什么
  • 技术服务费进项发票怎么做分录
  • 王者荣耀如何更改战区
  • 收到拆迁补偿款现金流量表在哪里体现
  • 为什么申报个人所得税还要补税
  • 股权投资借差
  • 应付债券的应付利息怎么计算
  • 计划成本核算的账务处理
  • 水表同步
  • 个人从事生产经营
  • 怎么开通公众号微信公众平台
  • smart模板教程
  • 微信小店的入口在哪里
  • el-upload上传文件携带参数
  • 人工智能科技向善
  • setenforce 0命令
  • zip 压缩命令
  • 增值税发票复印件可以入账吗与原件一致
  • 会计账的银行存款与银行存款不一致 是属于账账不符吗
  • 企业初期面临的主要问题
  • 公司为员工代扣代缴
  • 税控盘费和服务费都可以减免吗
  • 小规模纳税人利润超过300万
  • 织梦系统如何更换网站内容
  • 科技公司技术服务费税率
  • 大巴车怎么坐车
  • 应纳税所得额可以是负数吗
  • 承兑汇票是属于什么科目
  • 商场联营方案
  • 如果没有抵扣要交多少税
  • 报销招待费是什么意思
  • 本年利润的借方科目
  • 增值税普通发票几个点
  • sql数据库检查
  • mysql绿色版安装配置教程
  • mysql修改密码错误
  • 台式电脑NUM LOCK键还能亮,算不算死机了
  • win2003系统安装
  • centos root被锁定如何取消
  • windowsxp如何创建宽带连接
  • window10如何修改电脑名称
  • 电脑开机后出现win7画面后一直黑屏
  • win10mobile最新版本
  • win8桌面不见了
  • node.js基础入门
  • unity3d怎么写代码
  • Node.js中的什么模块是用于处理文件和目录的
  • nodejs实战
  • 天津市税务总局现任领导
  • 北京重点税源直报平台登录
  • 国家税务总局2016年17号公告
  • 加强党的作风建设是目前全党的中心
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设