[Koa2核心(洋葱圈模型)简介和实践理解]

简介

Koa2概述:

  • 基于Node.js平台的web开发框架
  • 由Express原班人马打造:Express Koa Koa2

img

  • async/await 要求环境依赖Node v7.6.0及以上

Koa2特点

  • 支持 async/await
  • 洋葱模型中间件:当客户端发起一个请求到达第一层中间件并处理后,服务器处理请求,将处理结果传递给第二层中间件,到达第二层中间件后再处理,再将处理结果传递给第三层中间件,之后再进入第三层中间件处理;第三层处理后,依次将处理结果向上返回给第二层处理、第一层处理,最后第一层再响应给客户端

img

二、快速上手

  • 检查Node的环境,要求环境依赖Node v7.6.0及以上

    node -v

  • 安装Koa

    npm init -y

    npm install koa

  • 创建并编写app.js文件

    1.创建Koa对象

    2.编写相应函数(中间件)

    3.监听窗口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//创建koa对象
const Koa = require('koa');
const app = new Koa()
//编写响应函数(中间件),ctx是应用上下文提供request和response方法接受和相应;
//参考洋葱模型,第二层中间件是否执行取决于第一层中间件的next()是否执行
app.use(async(ctx,next) => {
console.log("koa1")
const ret = await next() //执行第二层中间件,并且是异步的,next()返回一个Promise对象,在此等待第二层中间件返回后才继续往下执行;
console.log("koa1.1")
})
//第二层中间件
app.use(async(ctx,next) => {
console.log("koa2")
const ret = await next(); //执行第三层中间件,next()的返回值来自于第三层中间件的return,并且是一个Promise{I love The dog!}对象,                  //想要获取Promise对象中的数据,需要用await,则箭头函数要用async修饰;
console.log(ret);
console.log("koa2.1")
})
//第三层中间件
app.use((ctx,next) => {
console.log("koa3")
ctx.response.body = "hello koa3!"
return "I love The dog!" //向第二层中间件返回执行结果
})

//绑定端口号
app.listen(3000)

结果

在控制台可以看到这样的输出顺序

img