美文网首页
node express用中间件实现计算一次响应的耗时

node express用中间件实现计算一次响应的耗时

作者: 麦芽花生糖 | 来源:发表于2020-03-20 01:17 被阅读0次

    express 中间件

    曾经被面试官问过express的中间件中,next是干嘛的,我没答出来,甚是尴尬,今天好好看了一番。

    先看一个基本案例,打印结果为 1 3 2。

    const express = require('express');
    const app = express();
    
    app.get('/*', (req, res, next) => {
      console.log(`1`);
      next();
      console.log(`2`);
    });
    
    app.get('/a', (req, res, next) => {
      console.log(3);
      res.end('<h1>hello</h1>');
    })
    
    app.listen('3000');
    

    next()会暂停当前中间件的执行,去执行下一个中间件,如果一个中间件没有调用next(),那么后续匹配的中间件也不会执行。后面的中间件执行完后,会像堆栈一样展开,继续执行前面中间件的还没执行完的部分,例如上面例子中的console.log(2)

    在koa中也是类似的,只不过koa中要用异步函数await。

    用一个中间件来计算一次响应的耗时

    同一个面试官问的,当时也没答上来,太菜了。
    思路很简单,为了不侵入业务代码,在最前面用一个中间件来接收所有请求,记录下开始时间,然后调用next(),待后面的业务代码都执行完后,最后会来继续执行这个中间件,这时就可以计算耗时了,示例如下:

    app.use((req, res, next) => {
      const start = new Date().getTime();
      next();
      console.log(`耗时${new Date().getTime() - start}ms`);
    })
    

    一个可以运行的栗子:

    const express = require('express');
    const app = express();
    
    app.use((req, res, next) => {
      const start = new Date().getTime();
      next();
      console.log(`耗时${new Date().getTime() - start}ms`);
    })
    
    app.get('/a', (req, res, next) => {
      res.end('<h1>hello</h1>');
    })
    
    app.listen('3000');
    

    相关文章

      网友评论

          本文标题:node express用中间件实现计算一次响应的耗时

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