什么是koa洋葱模型?

简介: 什么是koa洋葱模型?

什么是koa

Koa是一个精简的node框架,被认为是第二代Node框架,其最大的特点就是独特的中间件流程控制,是一个典型的洋葱模型,它的核心工作包括下面两个方面:

将node原生的req和res封装成为一个context对象。

基于async/await的中间件洋葱模型机制。

什么是洋葱模型。

何为“洋葱模型“?洋葱内的每一层表示一个独立的中间件,用于实现不同的功能,比如日志记录,异常处理等。每次请求都会从左侧最外层开始,一层层经过中间件,当执行到最里层的中间件之后,接着从最里层的中间件开始逐层返回。因此对于每层的中间件来说,在一个 请求和响应 周期中,都有两个时机点来添加不同的处理逻辑。是不是有点像 DOM 事件流的事件捕获阶段(从外到里)和事件冒泡阶段(从里到外)。

Koa的洋葱模型是以next()函数为分割点,先由外到内执行Request的逻辑,然后再由内到外执行Response的逻辑,这里的request的逻辑,我们可以理解为是next之前的内容,response的逻辑是next函数之后的内容,也可以说每一个中间件都有两次处理时机。洋葱模型的核心原理主要是借助compose方法

为什么需要洋葱模型?

因为很多时候,在一个app里面有很多中间件,有些中间件需要依赖其他中间件的结果,用葱模型可以保证执行顺序,如果没有洋葱模型,执行顺序可能出乎我们的预期

扩展Koa 与 Express 对比

1.express 拥有路由、模板等框架常见功能,Koa 不含任何中间件,Koa 可被视为 node.js 的 http 模块的抽象,
Express 则是 node.js 的应用程序框架。
2.中间件实现机制;express 基于 Callback,koa 基于 Promise
3.错误处理;express 对错捕获处理起来很不友好,每一个回调都拥有一个新的调用栈,因此你没法对一个 callback 
做 try catch 捕获,你需要在 Callback 里做错误捕获,然后一层一层向外传递。
4.响应机制;express在调用 res.send 方法后就立即响应了,而koa则是在所有中间件调用完成之后,在最外层中间件进行响应。


相关文章
|
前端开发 搜索推荐 UED
解密前端路由: hash模式vs.history模式
解密前端路由: hash模式vs.history模式
|
7月前
|
人工智能 自然语言处理 API
AI Agent 职业路线全解析:从入门到专家的能力图谱与进阶路径
大模型正从文本生成迈向AI Agent时代,核心范式由“预测下一个词”升级为“预测下一个动作”。AI Agent工程师聚焦自主闭环系统构建,需掌握推理框架、记忆设计、API集成与多智能体协作四大能力,职业路径覆盖应用层、系统层到专家层,是认知自动化与下一代软件工程的核心赛道。(239字)
749 2
|
Kubernetes 负载均衡 安全
【K8S系列】深入解析k8s网络插件—Cilium
【K8S系列】深入解析k8s网络插件—Cilium
3402 1
|
Kubernetes Linux Docker
【kubernetes】修复 linux 服务器重启后,kubelet 启动失败的问题
【kubernetes】修复 linux 服务器重启后,kubelet 启动失败的问题
3910 1
|
数据安全/隐私保护 Docker 容器
ElasticStack----使用Docker方式安装单节点的8.1.3版本的ElasticSearch
ElasticStack----使用Docker方式安装单节点的8.1.3版本的ElasticSearch
2374 0
ElasticStack----使用Docker方式安装单节点的8.1.3版本的ElasticSearch
|
存储 Ubuntu 安全
Ubuntu 与 Manjaro Linux:你应该选择哪一个?
除了完全擦除当前机器并安装 Linux之外,您还可以 在 Windows 旁边同时启动一个发行版,尽管这是一个乏味的过程,我们并不总是推荐这样做。更好的选择是 从 USB 驱动器启动 Linux 发行版 ,以同时尝试 Ubuntu 和 Manjaro。如果您熟悉虚拟机,那么 在 VirtualBox 中安装和使用 Linux 发行版也很容易。 当然,您还需要这些发行版的ISO 文件,因此请访问Ubuntu和Manjaro 的下载页面 开始使用。
|
存储 人工智能 搜索推荐
Tablestore OpenMemory MCP : 跨会话、跨模型的智能记忆解决方案
本文介绍了Mem0的原理与应用场景,并基于Mem0构建了Tablestore OpenMemory MCP服务,实现个性化旅行规划助理。Mem0是一种为大型语言模型设计的智能记忆层,通过向量数据库持续学习用户交互信息,实现跨会话的个性化记忆管理。该服务提供多种MCP工具,便于集成到各类AI应用中。最后演示了个性化旅行规划应用,并介绍了服务的运行与配置方式。
1658 0
|
SQL 弹性计算 安全
在云上轻松部署达梦数据库
达梦数据库(DM Database)是达梦数据库有限公司开发的关系型数据库管理系统,广泛应用于政府、金融、能源等行业。它具备高性能、高安全、兼容性强、易管理等特点,支持多种操作系统,适用于关键业务系统、政务系统及大数据处理等场景。在阿里云上,可通过一键部署快速使用达梦数据库DM8。
|
JavaScript 前端开发 Linux
在 Node.js 和 Electron 中获取设备 UUID 的最佳实践
【JS】在 Node.js 和 Electron 中获取设备 UUID 的最佳实践
1891 1
|
消息中间件 负载均衡 算法
聊聊 RocketMQ中 Topic,Queue,Consumer,Consumer Group的关系
本文详细解析了RocketMQ中Topic、Queue、Consumer及Consumer Group之间的关系。文中通过图表展示了Topic可包含多个Queue,Queue分布在不同Broker上;Consumer组内多个消费者共享消息;并深入探讨了集群消费与广播消费模式下Queue与Consumer的关系,以及Rebalancing机制在实例增减时如何确保负载均衡。理解这些关系有助于更好地掌握RocketMQ的工作原理,提升系统运维效率。
3776 2