我写了一个简单的包装应用程序,一个得到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参数?
有人体验过这个吗?
答案 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});
});