node.js教學-使用檔案系統

7 / 12, 2013 JS , node.js , 網路

這是node.js教學的第三篇(對不起大家這篇教學文較遲,因為近來要為Allen和Secret幫忙寫程式所以有點累。)

相信大家看過第一和二篇教學文後,對怎樣用node.js製作網路應用程式都有一些認知。而在這篇文章,我會介紹你node.js的檔案系統是怎樣使用的。(小心:node.js的檔案系統和其他語言的檔案系統有點不同,請多加留意。)

node.js的檔案系統在設計上是以非同步方式來運行的。原本程式碼是按次序來運行,一行接一行的。可是在node.js的非同步輸入/輸出架構的檔案系統上,當你呼叫檔案系統函數的時候,他不會即時返回檔案工作的結果。相反,node.js會繼續執行下一行代碼。而那檔案工作完成時會由你設定的自訂函數來處理結果。

首先,我們要載入node.js的檔案系統模組。

var fs = require('fs'); //載入node.js的檔案系統模組

node.js的檔案系統模組有很多函數,而最常用的是

fs.readFile(path,callback)

,用來讀取檔案的內容。

fs.readfile(__dirname+'/file.txt',function(error, content){ //讀取file.txt檔案的內容
    if(error){ //如果有錯誤就列印訊息並離開程式
        console.log('檔案讀取錯誤。');
    }
    else {
        //把檔案的內容輸出
        //注意content變數的類型不是一個字串(String)
        //而是一個Buffer物件,所以要用 Buffer.toString() 方法來
        //把這Buffer物件的內容變成一個字串,以作輸出。
        //下回教學會解釋Buffer物件是用來幹什麼的
        console.log(content.toString());
    }
});

//在這裡的代碼不會被上面的操作擋住,並繼續執行

那怎樣把資料寫入檔案呢?node.js的檔案系統有

fs.writeFile(path,data,callback)

內寫入檔案的。

var data = "Hello node.js!"; //要寫入檔案的內容
fs.writeFile(__dirname+'/file.txt',data,function(error){ //把資料寫入檔案
    if(error){ //如果有錯誤,把訊息顯示並離開程式
        console.log('檔案寫入錯誤');
    }
});

當然,node.js的檔案系統並不止這些。想看看node.js的檔案系統函數可以參考node.js的官方說明(有很多函數啊!)。還有,你會發現每個函數都會有兩個版本:非同步和同步版本。同步版本的函數會等待檔案工作執行完畢,然後再返回結果。所以需要很多檔案系統工作的程式(例子:HTTP伺服器)千萬不要用同步版本的檔案系統函數啊!因為同步版本的函數會把node.js的事件迴圈擋住直至執行完畢,令其他工作不能同時執行。

大家請留意下一篇教學文啊!因為我要解釋什麼是Buffer物件欸……

  • DennisLeg

    fs.readfile(__dirname+’/file.txt’,function(error, content){ //讀取file.txt檔案的內容
    if(error){ //如果有錯誤就列印訊息並離開程式
    console.log(‘檔案讀取錯誤。’);
    }

    這段code的fs.readfile應該是fs.readFile
    執行的時候發生TypeError發現的

    • Licson Lee

      啊,我打錯了,會盡快更正

      • 熊熊 吳

        大大 內文現在還有readfile哦~ 在程式碼那邊

      • 曾令燊

        哈哈!! readfile… 還是沒改喔!!

  • s3131212

    請問文中的「非同步方式」是什麼?

    • Licson Lee

      讓我舉一個例子:你求職的時候不會發了電郵後呆坐在電腦旁等待結果,而是會在等待結果的時候幹其他東西。非同步方式就是代表當一樣工作進行時,其他工作可以繼續執行,不需要一個一個執行。這使當很多動作在進行的時候現在的工作可以不用被其他工作擋住,並可繼續執行。