1. 程式人生 > 實用技巧 >02_nodejs常用模組

02_nodejs常用模組

一、全域性物件

常用的全域性物件 __dirname , __filename

__dirname 當前模組的目錄名,等同於path.dirname(__filename)

__filename 當前模組的檔名,這是絕對路徑。

二、模組講解

1、OS模組

var os = require("os");
console.log("platform:", os.platform());
console.log("release:", os.release());
console.log("type:", os.type());
console.log("arch:", os.arch());

2. Process模組

Process物件是一個global全域性物件,控制著當前NodeJS程序。由於它對於Node來說是始終可用的,因此可以省掉 require()

// process 是全域性變數

// 當前程序的路徑
console.log(process.cwd());
console.log(process.chdir("./filepath"));
process.stdout.write("hello world");
process.stderr.write("error");

// process.on() 監聽事件
process.on("exit", function(code){
    console.log(code);
});
process.on("uncaughtException", function(err){
    console.log(err);
});

process.exit();

標準輸入輸出流

process.stdin 可讀流

process.stdout 可寫流

process.stderr

process.stdin.resume();
process.stdin.setEncoding("utf-8");
process.stdin.on("data", function(text){
    process.stdout.write(text.toUpperCase());
});

通過process物件來獲取平臺資訊

process.arch 返回一個標識處理器架構的字串 'arm' , 'ia32', 'x64'

process.memoryUsage() 返回一個描述當前程序中記憶體使用情況的物件,具有4個屬性: rss, heapTotal, heapUsed, external

process.exit() 通過code狀態碼來決定程式是正常退出還是錯誤退出,當程式執行結束後,可以在終端中通過 echo $? 或者是 echo %errorlevel% 來獲取狀態碼

process.pid 屬性,返回程序的ID號

process物件實現了EventEmitter事件介面,所以可以對它新增監聽器。

process.nextTick() 方法允許你將回調方法放在下一次的事件輪詢佇列的第一個。也就是說你可以將這個回撥方法進行略微的延遲,這會比setTimeout()設定 0 毫秒的延遲要更有效率

3. console物件

格式佔位符

%s %d %j

字串 數字 JSON

列印物件時,如果沒有使用%j, 那麼系統會預設呼叫util.inspect方法進行物件格式化。

其實console.log console.error console.info console.warn這四個方法內部都是使用的process提供的stdin , stdout , stderr這三個物件來實現的。

可以在控制檯通過 2> [fileName] 的方式將程式執行中的錯誤資訊重定向到檔案中,而不是在控制檯中列印。這是因為在作業系統內部一共有三個標準流 stdin, stdout, stderr. 分別對應數字0, 1, 2

var name = 'joyjoe';
var user = {name: 'joyjoe'};
console.log('Hello: ' , name);
console.log('Hello: %s' , name);
console.log('Hello: %j' , user);
console.err('Error, bad User: ' , user);
node console.js 2>error.log

console.trace()

通過console.time() 和 console.timeEnd() 兩個方法來實現時間基準測試

4. Url模組

var url = require("url");
var baseURL = 'http://nodejs.cn/api/stream.html#stream_readable_setencoding_encoding";

url.parse(baseURL);

var queryURL = "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=node%20url&rsv_pq=c64714e100067de8&rsv_t=90619GdyWxr98m%2BjT1vFFgIj5qlVJWCLw215zhVVtnESrJE%2Fic4nboA4h%2Fo&rqlang=cn&rsv_enter=1&rsv_sug3=14&rsv_sug1=11&rsv_sug7=100";

url.parse(queryURL);
url.parse(queryURL, true);

var json = {
  protocol: 'https:',
  slashes: true,
  auth: null,
  host: 'www.baidu.com',
  port: null,
  hostname: 'www.baidu.com',
  hash: null,
  search: '?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu',
  query: 'ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu',
  pathname: '/a/b/s',
  path: '/a/b/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu',
  href: 'https://www.baidu.com/a/b/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu'
};

url.format(json);

5. Path模組

path.join()使用平臺特定的分隔符把全部給定的path片段拼接起來並規範化生成的路徑

path.dirname()返回一個path路徑的目錄名稱

path.basename()返回一個path路徑的最後一部分

path.extname()返回一個path路徑的副檔名(從最後一個.號開始)

6. Timer模組

Timer模組暴露了全域性API,用來在某個時間段呼叫排程函式。

Timeout類,內部建立,從setTimeout() 和 setInterval() 返回。可以傳給 clearTimeout() 和 clearInterval() 來取消預定操作

當你預定一個Timeout定時器類時,只要定時器處於活動狀態,NodeJS的事件迴圈機制就會繼續執行。同時可以通過ref() 和 unref() 函式來控制定時器的預設行為。

timeout.ref() 呼叫時,只要定時器處於活動狀態,就要求事件迴圈不要退出。預設情況下所有定時器都是活動狀態。

timeout.unref() 呼叫時,處於活動狀態的定時器,要求退出事件迴圈。也就是說當所有的定時器執行完畢(此時程式中已經沒有處於活動狀態的定時器類)後就會退出程序。

setImmediate(callback, ...args) 預定立即執行的callback 這些回撥函式會在IO事件的回撥函式執行完畢後立即執行。也就是說immediate 函式會在 interval 函式之前呼叫。

多次呼叫該方法,多個回撥函式會按照它們被建立的順序依次執行。每次事件迴圈迭代時都會處理整個回撥佇列。如果一個立即執行定時器建立後是被當前正在執行的回撥給排入佇列的,那麼這個定時器會在下一次的事件迴圈迭代時才會被觸發。 而 process.nextTick() 方法指定的回撥函式,前面說, 回撥方法放在下一次的事件輪詢佇列的第一個。 也可以理解為 在當前事件輪詢結束後執行。