美文网首页
koa中间件

koa中间件

作者: 冷小谦 | 来源:发表于2018-10-15 15:29 被阅读54次

    1.logger
    koa一个重要设计就是中间件,首先先看logger打印日志的功能。

    console.log(`${Date.now()} ${ctx.request.method} ${ctx.request.url}`)
    也可以拆分独立函数
    const logger=(ctx,next)=>{
      console.log(`${Date.now()} ${ctx.request.method} ${ctx.request.url}`);
      next();
    }
    

    中间件就是在request和response请求之间实现中间功能。
    app.use来加载中间件,其中中间件默认接收两个参数,第一个是context对象,第二个是next函数,调用next函数,就可以把执行权转交给下一个中间件。
    2.中间件栈
    多个中间件形成栈结构,先进后出。

    1.最外层的中间件首先执行。
    2.调用next函数把执行权交给下一个中间件。
    3.最内层的中间件最后执行
    4.执行结束执行权交给上一层中间件
    5.最外层中间件收回执行权后,执行next函数之后的代码。

    const one = (ctx, next) => {
      console.log('>> one');
      next();
      console.log('<< one');
    }
    
    const two = (ctx, next) => {
      console.log('>> two');
      next(); 
      console.log('<< two');
    }
    
    const three = (ctx, next) => {
      console.log('>> three');
      next();
      console.log('<< three');
    }
    
    app.use(one);
    app.use(two);
    app.use(three);
    输出:
    >> one
    >> two
    >> three
    << three
    << two
    << one
    即先执行最外层one,执行到最内层,再执行最能层代码,最后最外层one收回执行权。
    如果把two的next注释:
    >> one
    >> two
    << two
    << one
    执行到two没有next因此不再执行。
    

    3.异步中间件
    异步中间件必须携程async函数形式。

    const fs = require('fs.promised');
    const Koa = require('koa');
    const app = new Koa();
    
    const main = async function (ctx, next) {
      ctx.response.type = 'html';
      ctx.response.body = await fs.readFile('./demos/template.html', 'utf8');
    };
    
    app.use(main);
    app.listen(3000);
    

    中间件必须携程async函数,fs.readFile是异步操作必须携程await

    相关文章

      网友评论

          本文标题:koa中间件

          本文链接:https://www.haomeiwen.com/subject/bgsfzftx.html