其實Node.js只有剛碰到些皮毛,整個就是超級不熟,但今天因為工作上需要,所以只能查查資料硬上了,一整個就是大挫敗(死),目前需要做的是跟檔案處理有關,而說到檔案就不能不提到Node.js的FileSystem,簡稱fs。
這篇文章應該不會做到詳細的介紹,後端Node.js還是超級初新者,所以本篇主要是筆記我實作上所遇到的問題與查詢到的資料,希望能幫助到同樣有問題的朋友。
FileSystem前置作業
FileSystem官方文件:https://nodejs.org/api/fs.html
FileSystem主要是在做對檔案的管理、監控、讀取等等,總之想到跟檔案有關的東西都可以來這邊找找,當然,使用前FileSystem之前,我們要記得先require進我們的js檔。
補充說明:有sync在名稱的函式,代表著「同步」,沒有sync代表「非同步」,請看此篇文章
var fs = require('fs');
一次讀取檔案:readFile(filePath, [option], callback)
這個函式負責的就是在非同步的狀態下讀取檔案,當檔案全部讀取到buffer後,執行「Callback」函式。
- 「filePath」負責接收「檔案路徑」
- 「option」則是有一些選項可以額外傳入
- 「callback」則代表檔案讀取完畢時要執行的函式內容
「callback」會被傳入兩個參數:「error」和「data」,正常狀態下「error」是空值,如果有錯誤就會有東西,「data」則是儲存了從路徑讀取到的檔案內容,我們就可以用讀取到的「data」做我們想要做的事情。
fs.readFile(filePath, 'utf8', function(error, data) {
if( error )
console.log( error );
else
res.write(data);
res.end();
});
分批讀取檔案:createReadStream(path, [option])
為什麼有了readFile還要createReadStream呢?因為有的時候我們要讀取的檔案比較大,而上面有提到,readFile會把檔案讀取完畢再執行callback,很有可能會讓使用者等待過久,因此才會有createReadStream的誕生,它的用法如下:
//先建立一個Read Stream
var readStream = fs.createReadStream;
//定義一個變數儲存完整檔案
var wholeData;
//給readStream Listen一個data事件,callback會被傳入一個參數,其值為讀取的檔案的一小片段
readStream.on('data', function(chunk){
console.log('讀取中');
wholeData += chunk;
});
//當readStream Listen到一個end事件時,表示檔案讀取完畢了,執行callback,
readStream.on('end', function(){
console.log(wholeData);
});
2016-07-07 at 上午 1:38
這樣聽起來你知道有沒有 sync 的差別囉