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

2020-03-20  本文已影响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');
上一篇下一篇

猜你喜欢

热点阅读