如何在快速js中编写包装类

时间:2017-02-07 15:29:26

标签: javascript node.js express npm wrapper

我写了一个简单的包装应用程序,一个得到a)请求日期&用户请求的时间 b)请求URL。 c)响应时间。

这是如何包装快递js

var express = require('express');
var app = express();

var appget = app.get;

(function() {

app.get = function() {

  var start = new Date();

  console.log('arguments', arguments)

  var result = appget.apply(this, arguments);
  var end = new Date();

  var duration = end.getTime() - start.getTime();

  console.log("duration===", duration);
}

})();

我写了简单的包装代码 但需要知道如何获取req参数?

有人体验过这个吗?

1 个答案:

答案 0 :(得分:1)

您可以使用放置在所有路由之前的Express中间件功能来执行此操作,以便您可以在通过服务器的任何路由中应用此功能。在中间件中,下面的代码正在等待'finish' event to be emitted from the res object,一旦标题和正文被完全写入以发送回请求者。如果您希望在请求本身关闭后记录响应时间,则可以在req对象上侦听'close'事件,而不是在下面的中间件中。

const express = require('express');
const app = express();
const port = process.env.PORT || 1337;

// Place this middleware before any of the route definitions/middleware
app.use((req, res, next) => {
    // store when request date & time came in
    req.startTime = Date.now();

    // Log the original URL requested
    console.log(req.originalUrl);

    // Register finish event handler so when the response
    // body and headers are sent, the total responseTime is logged
    res.on('finish', () => {
        let responseTime = Date.now() - req.startTime;
        console.log(`Response Time: ${responseTime}`);
    });

    return next();
});

// Place all routes/router middleware here  

app.listen(port, () => { 
    console.log(`Listening on ${port}); 
});