1. 程式人生 > >node.js之fs模組的功能

node.js之fs模組的功能

node.js 的 api 都挺好用的。

var http = require("http");
var fs = require("fs");

var server = http.createServer(function(req,res){
    //不處理小圖示
    if(req.url == "/favicon.ico"){
        return;
    }
    fs.mkdir("./album/aaa");
    
});

server.listen(3000,"127.0.0.1");


fs.stat(path , callback);  可以返回資料夾的一個狀態。

var http = require("http");
var fs = require("fs");

var server = http.createServer(function(req,res){
    //不處理小圖示
    if(req.url == "/favicon.ico"){
        return;
    }
    //stat檢測狀態
    fs.stat("./album/aaa",function(err,data){
        //檢測這個路徑,是不是一個資料夾
        console.log(data.isDirectory());
    });
    
});

server.listen(3000,"127.0.0.1");






var http = require("http");
var fs = require("fs");

var server = http.createServer(function(req,res){
    //不處理小圖示
    if(req.url == "/favicon.ico"){
        return;
    }
    //儲存所有的資料夾
    var wenjianjia = [];
    //stat檢測狀態
    fs.stat("./album/aaa",function(err,data){
        //檢測這個路徑,是不是一個資料夾
        // console.log(data.isDirectory());
        //顯示所有資料夾,檔案
        fs.readdir("./album",function(err,files){
            //files是個檔名的陣列,並不是檔案的陣列,表示./album這個資料夾中的所有東西
            //包括檔案,資料夾
            console.log(files);

            var length = files.length;
            for(var i = 0; i < files.length; i++){
                var thefile = files[i];
                //又要進行一次檢測
                fs.stat("./album/" + thefilename,function(err,stats){
                    if(stats.isDirectory()){
                        wenjianjia.push(thefilename);
                    }
                    console.log(wenjianjia);
                });
            }
            
        })


    });
    
});

server.listen(3000,"127.0.0.1");






檢測是不是一個資料夾,他是一個非同步的語句,還沒檢測成功就執行下一次了。下個單位的時候,那個單位已經變了,file已經變成了bbb了。aaa的回撥函式說我檢測成功了,這個時候這個事件就加入進來了,就push進去了。

所以你會發現這個陣列出現了兩次bbb,而沒有aaa。這是因為在檢測aaa資料夾的時候,他是非同步的,他沒等結果返回呢,就檢測bbb了,所以他干擾了局部變數。