2018年3月15日 星期四

Node.js 學習筆記 (二) : console 模組 (控制台) 測試

安裝 Node.js 之後開始進行 console 測試, 主要是參考下面這本書中的範例 :

你不能錯過的Node.js指南:實用X必用X拿來即用的300段程式碼+173個範例




另外也參考之前文章中提到的幾本 :

不一樣的Node.js :用JavaScript打造高效能的前後台網頁程式
深入淺出Node.js
Node.js 實戰手冊

本系列之前的測試文章參考 :

關於 Node.js
如何更新樹莓派的 Node.js
Node.js 學習筆記 (一) : 在 Windows 安裝 Node.js


1. 用 console.log() 或 console.info() 輸出訊息 :

Node.js 的訊息輸出函數有 console.log() 與 console.info(), 兩者用法與功能完全一樣, 都是向標準輸出介面 (螢幕) 輸出字串 :

> console.log("OK")
OK
undefined
> console.info("OK")
OK
undefined

與 C 語言的 printf() 類似也可以輸出格式化字串, 字串資料使用 %s 格式輸出, 例如 :

> console.log("I am %s years old", 23)
I am 23 years old
undefined
> console.info("I am %s years old", 23)
I am 23 years old
undefined
> console.log("%s", "Hello", "World")           #一個格式多個輸出字串
Hello World
undefined
> console.log("%s! %s!", "Hello", "World")    #多個格式多個輸出字串
Hello! World!
undefined
> console.log("%")                               
%
undefined
> console.log("%%")
%%
undefined

數值變數使用 %d 格式輸出, 如果參數為數學計算式, console.log() 函數會先進行計算後轉成字串輸出, 例如 :

> console.log(2+0.1)                    #先做運算再轉成字串輸出
2.1
undefined
> console.log("%d", 2, 0.1)          #一個格式多個輸出字串
2 0.1
undefined
> console.log("%d-%d", 2, 0.1)    #含有特殊符號
2-0.1
undefined
> console.log("%d", 2+0.1, 2-0.1, 2*0.1, 2/0.1)       #一個格式多個輸出字串
2.1 1.9 0.2 20
undefined
> console.log("%d", "2+0.1")     #格式錯誤輸出 NaN
NaN
undefined
> console.log(2/0)                        #除以 0 得 Infinity
Infinity
undefined

不過, 數值用 %s 輸出或數字字串用 %d 輸出也是可以的, Node.js 會自動轉型, 事實上, 任何型態都可以用 %s 格式輸出, 但 %d 則必須能轉成數值者才可以, 否則會輸出 NaN, 例如 :

> console.log("%s", 2018)                   #任何型態都可以用 %s 格式輸出
2018
undefined
> console.log("%d", "2018")               #必須是可數值化者才可用 %d 輸出
2018
undefined
> console.log("%d", "2018-03-16")     #含有非數值字元無法轉成數值
NaN 
undefined
> console.log("%d", true, false)           #true 用 %d 格式化會變成 1, 但 false 還是 false
1 false 
undefined
> console.log("%s", true, false)
true false
undefined

若 console.log() 內是邏輯運算式, 則會在運算後輸出 true 或 false :

> console.log(1>2)
false
undefined
> console.log(2>=2)
true
undefined
> console.log(2<=2)
true
undefined
> console.log(1<=2 && 2>=2)
true
undefined
> console.log(1<=2 || 1==2)
true
undefined

JSON 格式的 Object 物件變數 (類似關聯式陣列或 Python 的 dict) 須以 %j 格式輸出, 例如 :

> var member={
... name:"Tony",
... gender:"Male",
... age:50}
undefined
> console.log("%j", member)
{"name":"Tony","gender":"Male","age":50}
undefined

也可以將物件直接放在參數中 :

> console.log("%j", {name:"Tony",gender:"Male",age:50})
{"name":"Tony","gender":"Male","age":50}
undefined

如果只有傳入一個格式參數, 則會將其當成一般字串輸出, 例如 : 

> console.log("%s")
%s
undefined
> console.log("%d")
%d
undefined
> console.log("%j")
%j
undefined


2. 用 console.err() 或 console.warn() 輸出錯誤訊息 :

這兩個函數用來輸出錯誤訊息, 用法與功能完全一樣, 與 console.log() 相同都可格式化輸出, 例如下面的程式 read_file.js 利用 fs 函式庫來讀取同目錄下的檔案 myfile.txt, 但該檔案實際上並不存在, 因此會出現讀取錯誤 :

#read_file.js
var fs=require("fs");
var file="myfile.txt";
var encoding="UTF-8";
fs.readFile(file, encoding, function(err, data) {
  if (err) {
    console.error("Error:\n%s", err);
    console.warn("Warn:\n%s", err);
    }
  else {
    console.log(data);
    }
  });

執行結果如下 :

D:\test>node read_file.js 
Error:
Error: ENOENT: no such file or directory, open 'D:\test\myfile.txt'
Warn:
Error: ENOENT: no such file or directory, open 'D:\test\myfile.txt'

也可以用 2> 符號將輸出重檔向至檔案, 例如 :

D:\test>node read_file.js 2> err.txt
D:\test>type err.txt
Error:
Error: ENOENT: no such file or directory, open 'D:\test\myfile.txt'
Warn:
Error: ENOENT: no such file or directory, open 'D:\test\myfile.txt'

沒有留言:

張貼留言