2014-09-05 53 views
1

我正在使用mikeal/request庫訪問WebAPI。 我想記錄到每個請求的控制檯執行時間。node.js + mikeal/request - 如何測量請求時間?

我有多個和嵌套的要求,所以我不想投入每一個: var start = Date.now(); ... var time = Date.now() - start; console.log('Finished in '+time+' ms');

我希望有做這樣的事情的可能性: requestWithDefaults = request.defaults({ ... startTime: null }); requestWithDefaults.on('request.prepare', function() { startTime = Date.now(); }); requestWithDefaults.on('request.finished', function() { var time = Date.now() - startTime; console.log('Finished in '+time+' ms'); });

但我不知道該如何掛鉤那些時刻。以某種簡單的方式可能嗎?

回答

1

如果您只想記錄某個進程的持續時間,可以使用內置的Node.js console.time()console.timeEnd()函數。你可以check out the Node console docs here

你可以寫一個小模塊來包裝請求的功能,並添加在console.time [完]聲明可能看起來像:

var request = require('request'); 

module.exports = { 
    get: function(url, next) { 
     // start console timer 
     console.time(url); 
     request.get(url, function() { 
      // end console timer 
      console.timeEnd(url); 
      next.apply(this, arguments); 
     }); 
    } 
}; 

你會那麼包括這個模塊,而不是請求模塊直接與那會默認給你那個日誌記錄。注意:這只是GET請求的一個例子,其餘的可以構建出來。

輸出格式爲[label]: 475ms。非常好,非常乾淨,可以顯示完成某些操作所需的時間。這不會給你從moment.js的格式化可能性,但它確實很簡單。

+0

感謝您的快速回復。 console.time/timeEnd是相當有趣的解決方案(我不知道這一點),但對我來說,主要問題是如何在準備請求和完成它的時刻掛鉤。 事件request.prepare和request.finished是假想的,只有我的願望。我不知道如何處理它們。 – Rympau 2014-09-06 07:12:03

+0

@Rympau我查看了請求模塊的源代碼,看起來好像沒有真正的事件掛鉤用於啓動請求或結束請求(除非結束事件沒有回調)。所以如果是我,我會編寫一個非常簡單的模塊來封裝請求模塊並自己發出這些事件,然後確保與請求模塊的所有交互都通過該包裝器模塊。 – jasonmerino 2014-09-06 21:09:24

+0

感謝您檢查請求和想法。我會嘗試編寫簡單的模塊,但由於沒有知識如何,我會很感激任何提示。 – Rympau 2014-09-08 09:40:47