koa2的理论

一、Koa2的介绍

1)介绍

  • 是基于Node.js平台的web开发框架
  • 是Express原班人马打造的,它们处理异步任务的方式分别是:

image-20220807192343675

  • 因为Koa2是使用async/await处理异步任务,因此对Node的版本有要求,需要是v7.6.0及以上

2)特点

  • 支持async/await
  • 洋葱模型的中间件

二、Koa2的使用

1)检查Node的环境 node -v

2)安装Koa

​ ① npm init -y 在当前文件夹中创建package.json文件,这个文件帮助维护第三方包的信息

​ ② npm install koa 在线联网下载,将koa下载在当前目录之下,这里在线下载默认是下载最新版本,最新版本的koa就是koa2

3)创建并编写app.js文件

​ ①创建Koa对象

​ ②编写响应函数(中间件)

​ ③监听端口

4)启动服务器 node app.js

//1.创建koa对象
const Koa = require('koa') //通过require的形式将koa的包引进来,得到了一个构造函数Koa
const app = new Koa() //通过构造函数创建一个koa的实例对象

//2.编写响应函数(中间件)
// ctx代表的是上下文,指的是web容器,能够通过ctx使用request和response  ctx.response,ctx.request
//next代表下一个中间件,下一层中间件是否能够得到执行,取决于next这个函数有没有被调用
app.use((ctx, next) => {
    console.log(ctx.request.url);//得到当前请求的url
    ctx.response.body = 'hello world'   //把响应体设置为hello world
}) //将响应函数通过use的方式应用到koa身上

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

中间件的特点:

  • Koa对象通过use方法加入一个中间件

  • 一个中间件就是一个函数

  • 中间件的执行顺序符合洋葱模型

    这个洋葱模型的执行过程,首先发出的请求先到达第一层中间件,对请求进行处理之后回到第二层中间件,在第二层中间件中处理完成之后,接着到第三层中间件,处理完之后到第二层中间件,最后到第一层中间件,直到将这个请求响应到前端浏览器中。

image-20220808173203457

  • 内层中间件能否执行取决于外层中间件的next函数是否调用

    // 第一层中间件
    app.use((ctx, next) => {
        console.log('第一层中间件');
        next()  //这里加上next()才能够执行下一个中间件
      //第二层中间件执行完毕之后,会回到第一层中间件next()执行的地方接着执行下边的内容
        console.log('第一层中间件执行next之后。。。');
    }) //将响应函数通过use的方式应用到koa身上
    // 第二层中间件
    app.use((ctx, next) => {
        console.log('第二层中间件');
        next()
      //第三层中间件执行完毕之后,会回到第二层中间件next()执行的地方接着执行下边的内容
        console.log('第二层中间件执行next之后。。。');
    })
    // 第三层中间件
    app.use((ctx, next) => {
        console.log('第三层中间件');
    })
    
  • 调用next函数得到的是Promise对象,要想获得Promise对象中包含的数据,需要加await和async

    image-20220808214334587

    // 第二层中间件
    app.use(async (ctx, next) => {
        console.log('第二层中间件');
        const ret = await next()    //如果不加await和async,得到的是Promise对象
        console.log(ret);
        //第三层中间件执行完毕之后,会回到第二层中间件next()执行的地方接着执行下边的内容
        console.log('第二层中间件执行next之后。。。');
    })
    // 第三层中间件
    app.use((ctx, next) => {
        console.log('第三层中间件');
        return 'i love yan'
    })
    
    app.use(async(ctx,next)=>{
    	//刚进入中间件想做的事情
      await next()
      //内层所有中间件结束之后想做的事情
    })
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值