2014年1月24日 星期五

Advanced JS Chapter 3

JavaScript撰寫模式:
http://shichuan.github.io/javascript-patterns/

fs函式官方文件:
http://nodejs.org/api/fs.html

main.js (高亮為讀檔部分)
var fs = require("fs");

var multiplication_table = function() {
    var i = 0, j = 0, output = "";
    for(i=1;i<=9;i++) {
        for(j=1;j<=9;j++) {
            output += j + "*" + i + "=" + j*i + ((j==9)?"":"\t");
        }
        output += ((i==9)?"":"\r\n");
    }
    return output;
};

var data = multiplication_table();

//Method A
fs.writeFile("tableA.txt", data, function (err) {
    if(err) throw err;
    console.log("A Write done.");
    
    fs.readFile("tableA.txt", "utf8", function (err, utf8Read) {
        if(err) throw err;
        console.log(utf8Read);
        console.log("A Read done.");
    });
});

//Method B
fs.open("tableB.txt", "w", 0644, function(err, fd) {
    if(err) throw err;
    fs.write(fd, data, 0, "utf8", function(err) {
        if(err) throw err;
        fs.closeSync(fd);
        console.log("B Write done.");
        
        fs.stat("tableB.txt", function(err, stats) {
            fs.open("tableB.txt", "r", function(error, fd) {
                var buffer = new Buffer(stats.size);
                fs.read(fd, buffer, 0, buffer.length, null, function(error, bytesRead, buffer) {
                    var utf8Read = buffer.toString("utf8", 0, buffer.length);
                    console.log(utf8Read);
                    fs.close(fd);
                    console.log("B Read done.");
                });
            });
        });
    });
});

輸出結果:
B Write done.
A Write done.
1*1=1   2*1=2   3*1=3   4*1=4   5*1=5   6*1=6   7*1=7   8*1=8   9*1=9
1*2=2   2*2=4   3*2=6   4*2=8   5*2=10  6*2=12  7*2=14  8*2=16  9*2=18
1*3=3   2*3=6   3*3=9   4*3=12  5*3=15  6*3=18  7*3=21  8*3=24  9*3=27
1*4=4   2*4=8   3*4=12  4*4=16  5*4=20  6*4=24  7*4=28  8*4=32  9*4=36
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  6*5=30  7*5=35  8*5=40  9*5=45
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  7*6=42  8*6=48  9*6=54
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  8*7=56  9*7=63
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  9*8=72
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81
B Read done.
1*1=1   2*1=2   3*1=3   4*1=4   5*1=5   6*1=6   7*1=7   8*1=8   9*1=9
1*2=2   2*2=4   3*2=6   4*2=8   5*2=10  6*2=12  7*2=14  8*2=16  9*2=18
1*3=3   2*3=6   3*3=9   4*3=12  5*3=15  6*3=18  7*3=21  8*3=24  9*3=27
1*4=4   2*4=8   3*4=12  4*4=16  5*4=20  6*4=24  7*4=28  8*4=32  9*4=36
1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  6*5=30  7*5=35  8*5=40  9*5=45
1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  7*6=42  8*6=48  9*6=54
1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  8*7=56  9*7=63
1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  9*8=72
1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81
A Read done.
Hint:由於JS為事件導向,可能因Method B處理速度較快而造成Method A的結果較晚輸出。

學習步驟:
1. 學習如何使用fs寫檔及讀檔。
2. 學習JSON結構及應用。

作業3:
1. 利用讀檔寫檔設計一個可編輯公告內容的網站。

沒有留言:

張貼留言