Koa中间件、洋葱模型、async和await(前端面试)

koa中间件

  • 先用new将koa实例化,实例化出来的koa对象称为应用程序对象,包含了很多的中间件
  • 使用app.listen方法启动,listen里面包含了很多的参数,使用端口号将koa启动
  • 小程序需要向服务器发送HTTP请求,koa也要接收HTTP请求,这时需要使用到中间件
  • 中间件也就是函数,定义一个中间件也就是定义一个函数,如何将一个函数变为中间件,需要使用app.use方法注册中间件
  • 测试:浏览器向服务器发送HTTP请求,localhost:3000,此时服务器koa通过中间件接收请求,打印相应的结果
  • 一个应用程序对象可以注册多个中间件,第一个中间件由koa自动调用,后面的中间件都需要由开发者自己调用
  • koa在给每一个中间件调用函数时,都会自动传入两个参数,一个是ctx,另一个是next,ctx就是上下文,next就是下一个中间件函数
    Koa中间件、洋葱模型、async和await(前端面试)_第1张图片

洋葱模型

Koa中间件、洋葱模型、async和await(前端面试)_第2张图片
Koa中间件、洋葱模型、async和await(前端面试)_第3张图片
中间件参数的前面一定要加上async,next的前面一定要加上await,如果不加,很难保证中间件一定按照洋葱模型执行
async和await适用于异步编程,是以promise为基础的

深入理解async和await

  • async和await一定要搭配使用,await有等待的意思,也可以相当于求值关键字,不仅可以对promise求值,也可以对关键字求值
    Koa中间件、洋葱模型、async和await(前端面试)_第4张图片
  • 什么是异步编程操作?
  • 对资源的操作、读文件、发送Htt请求,操作数据库
  • 当加载的内容非常多时,耗时非常严重,造成线程阻塞。await会造成线程的阻塞,等待异步的调用结果才能继续执行,使异步的调用变为同步的调用
  • async的意义在于,当在前面加上async时,所有的返回都会包装成promise。而且中间件引用了await,如果不加async,程序会报错

为什么一定要保证洋葱模型

  • 保证中间件按洋葱模型执行的先决条件是:一定要在下一次调用中间件next前面加上await,ctx之前加上async
  • 洋葱模型以next为分界线,例如计时,要计算下面几个中间件的时间的和,就必须等next下面的中间件跑完之后计算
    Koa中间件、洋葱模型、async和await(前端面试)_第5张图片

你可能感兴趣的:(前端,中间件,前端,面试)