Day24

1-使用koa搭建服务器

  let Koa = require('koa');
  let KoaRouter = require('koa-router');

  const app = new Koa();
  const router = new KoaRouter();


  router.get('/', (ctx, next) => {

  ctx.body = '我是服务器';

});

  app.use(router.routes())
  app.use(router.allowedMethods())


  app.listen('3000', () => {
  console.log('服务器启动成功');
    })

2-简单说明动态路由

  根据输入路由的不同,加载访问不同的HTML页面

3-说明 express 和 koa 的中间件的使用

  koa2的中间件是通过 async await 实现的,中间件执行顺序是“洋葱圈”模型。
  与 koa2 中间件不同的是,express中间件一个接一个的顺序执行, 通常会将 response 响应写在最后一个中间件中

  主要特点:
    app.use 用来注册中间件
    遇到 http 请求,根据 path 和 method 判断触发哪些中间件
    实现 next 机制,即上一个中间件会通过 next 触发下一个中间件

4-简述 koa 的洋葱圈模型
  整个核心功能在于 compose,这个用于压缩所有被 use 调用过的中间件之上。每一次 use 一个新的中间件的时候,将其 push 进对象里边的成员变量 middlewares 当中。
  所以重点就是要在 compose 当中进行递归,以合成最终要调用的那个函数,在监听到 request 请求的时候,将上下文对象 context 传入其中,最终完成整个所有中间件按照 洋葱圈 的  模型去执行。
  const Koa = require('koa2');
  const app = new Koa();

  app.use(async (ctx, next) => {
  console.log('第一层洋葱 - 开始')
  await next();
  const rt = ctx.response.get('X-Response-Time');
  console.log(`${ctx.method} ${ctx.url} - ${rt}`);
  console.log('第一层洋葱 - 结束')
  });

    // x-response-time
  app.use(async (ctx, next) => {
  console.log('第二层洋葱 - 开始')
  const start = Date.now();
  await next();
  const ms = Date.now() - start;
  ctx.set('X-Response-Time', `${ms}ms`);
  console.log('第二层洋葱 - 结束')
  });

    // response
  app.use(async ctx => {
  console.log('第三层洋葱 - 开始')
  ctx.body = 'Hello World';
  console.log('第三层洋葱 - 结束')
  });

  app.listen(8000);

posted @ 2021-03-06 23:27  warisFairy  阅读(27)  评论(0)    收藏  举报