深入理解Koa:中间件模型、API全览和与Express的对比(上)

  1. 前情提要-Express.js
  • 回顾express基础代码的写法
js 复制代码
app.use((req,res,next)=> {
  if (req.path ==='/' && req.method ==='get') {
    res.write('this is index');
    next();
  }
})

app.use((req,res,next)=> {
  if (req.path ==='/about' && req.method ==='get') {
    res.write('this is about');
    next();
  }
})

app.use((req,res,next)=> {
  if (req.path ==='/others' && req.method ==='get') {
    res.write('this is others');
    next();
  }
})
  • 回顾express的中间件模型
  1. Koa的发展历史
  • Express
    • 2010年6月,TJ开始编写Express
    • 2014年发展到v0.12,基本成熟,移交StrongLoop
  • Koa
    • 2013年8月,TJ开始编写K0a
    • 2015年8月,Koa发布v1.0.0版本
  • Node.js
    • 2013年3月,Node.js v0.10发布
    • 2014年12月,io.js不满Node.js的管理发起分裂
    • 2015年2月,Node.js v0.12发布
    • 2015年9月,Node.js与io.js合并为Node.js v4.0
  • Koa对Node.js的支特
    • 2015年2月,Koa放弃对Node v0.11以下的支持,并开始支持io.js
    • 2015年10月,Koa放弃对Node v4.0以下的支持,并用ES6重写的所有代码,发布v2.0.0内测版
  1. Koa与Express对比
  • 编程模型不同

    • Express的中间件是线型的
    • Koa的中间件是U型
  • 对语言特性的使用不同

    • Express使用回调函数next()
    • Koa v1.x使用generator语法
    • Koa v2.X使用async/await语法
  • 人们对于express还是Koa的选择

    • 2011~2016年,大概率会使用Express
    • 2017年之后,可能会使用Koa(因为风口过了)
  1. Koa的中间件模型
  1. 学习koa之前的准备工作
  • 全局安装
    • 安装node-dev代替node,代码一更新就自动重启
    • 安装ts-node-dev代替ts-node,支持TS语言
  • 代码
    • npm i -g node-dev ts-deno-dev或者yarn global add node-dev ts-deno-dev
  • 注意
    • 如果用TS,需要运行tsc-init初始化tsconfig,json
    • tsc的安装方法是全局安装typescript@3.8.3
    • 还需要安装@types/koa
  • 新建koa-demo/server.ts,并且运行以下命令初始化项目
sql 复制代码
yarn add koa
yarn add --dev @types/koa
tsc --init
  1. 基础代码演示
ts 复制代码
import Koa from 'koa'
const app = new Koa()

app.use(async (ctx,next)=>{
  ctx.body = 'hello'
  await next()
  ctx.body += ' Thailand'
})

app.use(async (ctx,next)=>{
  ctx.body += ' world'
  await next()
})

app.listen(3000)
  • ts-node-dev server.ts运行起来之后,访问localhost:3000得到以下结果
  • 增加content-type,会发现字体发生变化
ts 复制代码
...
app.use(async (ctx,next)=>{
  ctx.set('Content-Type', 'text/html; charset=utf-8')
  await next()
})

app.listen(3000)
  • 通过以上例子我们可以简单了解koa中间件的执行顺序,从上到下之后再从下到上
相关推荐
AskHarries17 分钟前
CDN 要不要上
后端
凤山老林1 小时前
SpringBoot 3 启用 spring.factories 后如何升级替换原有的 spring.factories ?
spring boot·后端·spring
吃饱了得干活1 小时前
JVM垃圾回收:从新生代到ZGC,从理论到调优
java·jvm·后端
Conan在掘金1 小时前
鸿蒙报错速查:arkts-no-func-expressions 禁用 function 表达式,用了就炸,根因 + 真解法
后端
geovindu2 小时前
python: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·python·算法·搜索算法
程序员清风2 小时前
AI不是万能的,大家要专注实践!
java·后端·面试
刘沅2 小时前
Redis的哨兵机制
后端·面试
AmazingEgg2 小时前
从 LIKE 到 Elasticsearch:博客搜索引擎可插拔改造全记录
后端
未秃头的程序猿2 小时前
MCP协议火了,但到底怎么用?我花了一个周末用Java接入了5个MCP Server
后端·ai编程·mcp
Cosolar2 小时前
Claude Opus 5 系统提示词被完整泄露,共 135027 字符、约 3.4 万 token
人工智能·后端·架构