位置: 编程技术 - 正文

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

  • 什么是节税?
  • 消费税和所得税的关系
  • 工商年报认缴时间填错了
  • 申领的发票多久过期
  • 生日卡片好看吗
  • 坏账准备需要计提成本吗
  • 员工的生日津贴怎么发
  • 流动负债占比低于50%,是什么结构类型
  • 应收票据贷方余额怎么办
  • 投资收益企业所得税优惠政策
  • 纳税人采取预收的措施
  • 小企业长期股权投资的核算
  • 退休后补发退休前的工资需要扣社保吗
  • 营改增后甲供材如何扣除
  • 多借多贷的会计分录格式
  • 不按出资比例取得分红怎么纳税?
  • 收到客户用房抵货款怎么办
  • 公司注销固定资产怎么处理税怎么交
  • 报销定额备用金什么意思
  • 增值税发票处理流程
  • 转股交印花税的优惠政策
  • 稿酬所得个人所得税计算方法
  • 财税政策是什么
  • 技术服务费属于什么税收分类编码
  • 增值税发票开具错误重开该怎么做会计分录?
  • 企业所得税税率2.5% 5% 25%
  • win8系统怎么连接无线
  • 多提的费用如何做冲减分录
  • 个人所得税应该计入什么科目
  • php oci_connect
  • dvd.rom
  • php做
  • php5升级到php7
  • 一般纳税人购买原材料会计分录
  • echarts地图参数设置
  • redux reducer使用教程
  • vue知识点汇总
  • 海关缴款书稽核比对
  • 限定性和非限定性资产的区别
  • 土地增值税的相关问题
  • 公司租用员工的车辆交什么税
  • 哪几类账户期末余额最大
  • 织梦网站停止使用了还侵权吗
  • 公司帮员工全额买社保该怎么入账?
  • sql中聚合函数的用法
  • 固定资产未入账的定性依据
  • 普惠性幼儿园是什么意思
  • 企业自有房产的认定标准
  • 承租人违约押金怎么办
  • 商场预付卡
  • 周转材料期末余额怎么算
  • 固定资产折旧的会计科目
  • 进出口企业需要哪些手续
  • 会计结账一般都是谁做
  • 分公司需要独立核算和报税吗
  • 会计科目的设置应该符合国家统一会计准则的规定
  • ubuntu字体文件
  • windows无法安装所需的文件,请确保所需的所有文件可用
  • win10edge浏览器如何切换到ie
  • 魔方u怎么弄
  • dreamweaver是干嘛的
  • win7系统连接蓝牙音箱
  • centos 安装chia
  • linux命令文件移动
  • win8.1开机音乐
  • win8无法安装inter显卡驱动
  • Windows环境下搭建Python开发环境的方法
  • cocos2d教程
  • 安卓手机微信取消窗口化
  • shell脚本中计算变量除法
  • 用python做逻辑回归
  • jq监听input框value值
  • unity飞机大战游戏毕业论文
  • unity如何连接数据库
  • bootstrap与Jquery UI 按钮样式冲突的解决办法
  • javascript初级教程
  • 税务局举报管理办法
  • 浙江省电子税务局手机开票入口
  • 企业所得税预缴时间规定
  • 重庆国家税务局官方网站
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设