美文网首页
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