位置: 编程技术 - 正文

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

  • 税收会计在会计中的应用
  • 税务师都有什么科目
  • 车船税和保险在一起怎么报销
  • 公司成立之初做哪些
  • 记账凭证拆开
  • 担保费能否开专票
  • 赔偿费计入费用减应收账款怎么做账
  • 个税计提和发放分录
  • 个人独资企业租赁收入如何纳税
  • 固定资产在现金流量表中的体现
  • 行政事业单位会计制度
  • 未投入使用的道路
  • 个人转让住房要交哪些税费?
  • 预缴税款缴多了怎么办
  • 剩余折旧月份
  • 发票额开多了多出的金额怎么处理?
  • 收到微信公众号退款怎么做账
  • 物业要交多少钱
  • 开增值税票需要合同吗
  • 企业代开租金专票开什么项目好?
  • 存货暂估入账的分录
  • 外管证的开具与注销流程
  • 收到政府补助怎么发朋友圈
  • 增值税优惠的二级明细科目
  • 累计已确认收入极可能不会发生重大转回
  • 企业资产类科目的是
  • 电子汇票如何使用
  • 补发住房补贴征求意见
  • 旅游公司主营业务介绍
  • 抄报税失败是怎么回事
  • 开通电子税务局需要什么资料
  • 苹果电脑怎么截屏ctrl加什么
  • 激活windows11怎么激活
  • 广告费和业务宣传费税前扣除基数
  • 代开专票计提附加税吗
  • 多系统设置
  • linux从入门到什么搞笑
  • 电脑很空但是占用率90
  • php根据日期判断星座
  • thinkphp use命名空间
  • 优先股转化
  • moments的用法
  • 外籍人员一次性奖金
  • spring ioc di aop
  • 用php写个简单的编程
  • php使用while循环计算1到100的和
  • 计提工会经费怎么做账务处理
  • 残保金工资总额包括什么
  • 国家退税收到的钱在哪里
  • 对外捐赠的会计处理企业会计准则和小企业会计准则
  • 织梦安装详细教程
  • 公司活动赠送小礼品
  • 企业转让股权如何缴纳企业所得税
  • 2022年山东省固定资产投资额
  • 数据库varchar和nvarchar
  • 城镇土地使用税每年都要交吗
  • 电子承兑背书一般多久到账
  • windowsxp网络ip设置
  • rundll32.exe在哪个文件夹
  • xp系统怎么找回删除的文件
  • debian glibc
  • mac系统怎么清理Adobe残留
  • bd是什么文件
  • squid详细
  • imac家长控制
  • win7系统自带游戏在哪
  • leerfel是什么牌子
  • win8.1优化工具
  • efi ghost win7
  • app塔防游戏
  • linux中查看命令怎么使用
  • 简述android中色值原理与表示形式
  • android新手入门
  • 简单介绍一下自己
  • using dispose
  • prototype模型
  • 中粮副总裁是什么级别
  • 车辆购置税怎么买
  • 2020年安徽省护理技能大赛视频播放
  • 商铺收税多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设