nodejs请求库,获取响应时间

使用nodejs request库: https : //github.com/mikeal/request

 var request = require('request'); request('http://example.com', function (error, response, body) { ... }) 

是否有可能在callback中获得响应时间? 该文件提到了response.statusCode。 看图书馆的源代码,我也看到无证response.headers和response.href,但我没有看到responseTime或类似的。

或者,是否有另外一个库来request提供响应时间?

ps:我知道我可以做这样的事情,但这不是一个解决scheme,因为我做了很多的asynchronous请求,我无法控制每个请求何时开始。

 var request = require('request'); var start = new Date(); request('http://example.com', function (error, response, body) { ... var responseTime = new Date() - start; }) 

请求库可以为你做计时( docs ):

 request.get({ url : 'http://example.com', time : true },function(err, response){ console.log('Request time in ms', response.elapsedTime); }); 

正如问题所暗示的,你可能会遇到一些问题,比如启动定时器,调用request然后在callback中停止定时器。

 var start = new Date(); request.get('http://example.com', function(err, response){ // NOT GOOD console.log('Request time plus 5 seconds', new Date() - start); }); require('sleep').sleep(5); // time-consuming synchronous action 

就像是

 var timedReq = function(url, next) { var start = new Date(); request(url, function(err, res, body) { res.responseTime = new Date() - start; next(err, res, body); }); }; 

会为你做。 这似乎很小,可能比find一个新的库更容易。

而不是使用Date(),你也可以使用process.hrtime。 我有一个图书馆专门为这种情况下,使用时间。 库名是exectimer 。

你可以像这样使用它:

 var timedReq = function(url, next) { var tick = new t.Tick("responseTime"); tick.start(); request(url, function(err, res, body) { tick.stop(); next(err, res, body); }); }; // when ready check the results with this: var responseTime = t.timers.responseTime; console.log(responseTime.min()); // minimal response time console.log(responseTime.max()); // minimal response time console.log(responseTime.mean()); // mean response time console.log(responseTime.median()); // median response time