Node慕课网学习笔记(五)

1. Koa2 中间件

  1. 为什么使用中间件

    • 拆分业务模块,使代码清晰
    • 统一使用中间件,使得各业务代码都规范标准
    • 扩展性好,易添加、易删除
  2. Koa2 业务代码都是中间件

    • 所有的 app.use(…) 都是中间件
    • 路由也是中间件(只不过限制了 url 规则)
    • 每个中间件都有 async 函数 ,第一个参数是 ctx ,第二个参数是 next
  3. 运用中间件

    app.js 中加入:(注册路由之前)

    // 模拟登陆(为了使用中间件)
    app.use(async (ctx, next) => {
      const query = ctx.query
      if (query.user === '张三') {
        // 模拟登录成功
        await next()  // 执行下一步中间件
      } else {
        // 模拟登录失败
        ctx.body = '请登录'
      }
    })
    
  4. async await 执行顺序

    代码要放在浏览器中执行(复制到控制台回车)

    await 后的函数执行完后,下面的代码才会执行

    // 加载一张图片
    async function getImg(url = '') {
    	await fetch(url)	// 加载图片
    }
    
    async function fn() {
        const url = 				   		'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2534506313,1688529724&fm=26&gp=0.jpg'
        const start = Date.now()    // 记录当前时间
        await getImg(url)   // 调用,加载图片
        const ms = Date.now()-start   // 计算时间差
        console.log(`加载图片花费了 ${ms} 毫秒`)
    }
    fn()
    

    执行顺序:1. fn ; 2.getImg 3. fn

  5. 演示 koa2 中间件的洋葱圈模型

    // 演示 koa2 中间件的洋葱圈模型  
    
    const Koa = require('koa');
    const app = new Koa();
    
    // logger
    
    app.use(async (ctx, next) => {
      await next();    // 先执行下一个中间件
      const rt = ctx.response.get('X-Response-Time');   // 获取时间差
      console.log(`${ctx.method} ${ctx.url} - ${rt}`);
    });
    
    // x-response-time
    
    app.use(async (ctx, next) => {
      const start = Date.now();
      await next();    // 执行下一个中间件
      const ms = Date.now() - start;    // 计算时间差
      ctx.set('X-Response-Time', `${ms}ms`);    // 记录/设置时间差
    });
    
    // response
    
    app.use(async ctx => {
      ctx.body = 'Hello World';
    });
    
    app.listen(3000);
    console.log('koa2 已经开始监听 3000 端口')
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值