深入理解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中间件的执行顺序,从上到下之后再从下到上
相关推荐
野犬寒鸦1 分钟前
从零起步学习并发编程 || 第三章:JMM(Java内存模型)详解及对比剖析
java·服务器·开发语言·分布式·后端·学习·spring
沐泽__20 分钟前
Flask简介
后端·python·flask
半聋半瞎27 分钟前
Flowable快速入门(Spring Boot整合版)
java·spring boot·后端·flowable
毕设源码-邱学长43 分钟前
【开题答辩全过程】以 基于SpringBoot的理工学院学术档案管理系统为例,包含答辩的问题和答案
java·spring boot·后端
修己xj1 小时前
SpringBoot解析.mdb文件实战指南
java·spring boot·后端
lpfasd1231 小时前
Spring Boot 定时任务详解(从入门到实战)
spring boot·后端·python
moxiaoran57531 小时前
Go语言的文件操作
开发语言·后端·golang
赴前尘2 小时前
记一次golang进程执行卡住的问题排查
开发语言·后端·golang
码农小卡拉2 小时前
Prometheus 监控 SpringBoot 应用完整教程
spring boot·后端·grafana·prometheus
计算机毕设VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue球鞋购物系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计