当前位置: 首页 > news >正文

【Node.js】Express 和 Koa 中间件的区别

1. Express 中间件

特点

  • 基于回调链(next 传递控制权)
  • 中间件本质就是 (req, res, next) 的函数。
  • 执行顺序是 线性串行,一旦调用 next() 就会交给下一个中间件。

示例

const express = require('express')
const app = express()// 中间件1
app.use((req, res, next) => {console.log('middleware 1 start')next() // 交给下一个console.log('middleware 1 end') // 不会等后面的异步
})// 中间件2
app.use((req, res, next) => {console.log('middleware 2')next()
})app.listen(3000)

👉 特点是 没有“洋葱模型”,执行顺序就是一条直线:

middleware 1 start
middleware 2
middleware 1 end   // 注意这里不是“包裹”,而是直接继续执行

2. Koa 中间件

特点

  • 基于 async/await 实现。
  • 使用的是 洋葱模型:先进入外层中间件 → 一直到底 → 然后再从底层往外层“返回”。
  • 中间件函数签名:async (ctx, next)

示例

const Koa = require('koa')
const app = new Koa()// 中间件1
app.use(async (ctx, next) => {console.log('middleware 1 start')await next() // 等待下一个中间件完成console.log('middleware 1 end') // 这里会在“返回来”的时候执行
})// 中间件2
app.use(async (ctx, next) => {console.log('middleware 2 start')await next()console.log('middleware 2 end')
})app.listen(3000)

👉 执行顺序:

middleware 1 start
middleware 2 start
middleware 2 end
middleware 1 end

这就是 典型的洋葱模型


3. 核心区别总结

特性ExpressKoa (2.x)
中间件形式(req, res, next)async (ctx, next)
控制流next() 直接进入下一个await next() 形成洋葱模型
上下文对象req + res 分开统一 ctx 封装请求响应
异步处理需要手动调用 next 并处理回调基于 async/await,天然异步
可读性与优雅性回调风格,复杂逻辑容易乱更优雅、直观

📌 一句话总结

  • Express 的中间件是 线性流水线
  • Koa 的中间件是 洋葱模型(更符合异步逻辑)。
http://www.dtcms.com/a/394662.html

相关文章:

  • 学习路之PHP--TP8+swoole
  • 【从零开始的大模型原理与实践教程】--第五章:动手搭建大模型LLaMA2
  • Vue.js 从入门到实践1:环境搭建、数据绑定与条件渲染
  • “潮涌之江,文兴浙里”文化推动高质量发展主题活动在西湖区调研
  • 【MongoDB】mongoDB数据迁移
  • 《C++多态入门:轻松理解虚函数与多态编程》
  • 虚拟化范式跃迁中的生命周期隐喻与命令哲学——解构Docker容器从抽象实体到可控资源的数字化生存法则
  • OpenLayers地图交互 -- 章节八:平移交互详解
  • AES+RSA 实现混合加密
  • 命名实体识别技术NER
  • 网络验证 一键加密 一键接入验证 加壳加密数盾加盾
  • JDBC组件
  • StandardScaler,MinMaxScaler等四个内置归一化函数学习
  • pandawiki 无法获取模型列表
  • openEuler2403安装宝塔面板
  • Altium Designer(AD) PCB铺铜
  • 解决Django长时间操作中的MySQL连接超时问题
  • 样本量估计原理与python代码实现
  • 0v0.pro 深度评测、 AI 助手篇、80+模型 free
  • ego(9)---ego-planner中的动力学仿真
  • 2025年9月第3周AI资讯
  • ETL详解:从核心流程到典型应用场景
  • SQL查询基础常用攻略
  • 数据结构二叉树(C语言)
  • Domain、BO、BIZ 三层的协作关系
  • 【从小白到精通之数据库篇】Mysql--连接与子查询
  • C++ 函数详解:从基础到高级应用
  • HTML打包的EXE程序无法关闭?
  • openEuler2403安装Ollama
  • 苍穹外卖项目实战(day11-1)-记录实战教程、问题的解决方法以及完整代码