在《深入淺出nodejs》有這樣一段(有部分增減):
1、nodejs引入模塊分四個步驟
- 路徑分析
- 文件定位
- 編譯執行
- 加入內存
2、核心模塊部分在node源代碼的編譯過程中就編譯成了二級制文件,在node啟動時就直接加載如內存,所以這部分模塊引入時,前三步省略,直接加入。
3、nodejs的模塊加載和瀏覽器js加載一樣都有緩存機制,不同的是,瀏覽器僅僅緩存文件,而nodejs緩存的是編譯和執行后的對象(緩存內存)。
基於以上三點:我們可以編寫一個模塊,用來記錄長期存在的變量。例如:我可以編寫一個記錄接口訪問數的模塊:
1 var count = {}; // 因模塊是封閉的,這里實際上借用了js閉包的概念 2 exports.count = function(name){ 3 if(count[name]){ 4 count[name]++; 5 }else{ 6 count[name] = 1; 7 } 8 console.log(name + '被訪問了' + count[name] + '次。'); 9 };
我們在路由里這樣引用:
1 var count = require('count'); 2 3 export.index = function(req, res){ 4 count('index'); 5 };
以上便完成了對接口調用數的統計,但這只是個demo,因為數據存儲在內存,服務器重啟后便會清空。真正的計數器一定是要結合持久化存儲器的。