2012-04-28 46 views
1

我正在創建一個靜態node.js服務器,它只是提供指定目錄中的純html,css和javascript。我試圖讓服務器讀取每個子目錄並將URL路由到它指定的文件。但它只能讀取根目錄。我正在創建靜態node.js服務器

var fs = require('fs'); 

var array = fs.readdirSync(__dirname); 
function getAllSub(array){ 
    for (i = 0; i < array.length; i++){ 
    if (array[i].indexOf(".") == (-1)) 
     {      
      array = array.concat(array[i] + "/" + fs.readdirSync(__dirname + "/" +  array[i])); 
     } 
    if (array[i].indexOf("/") != (-1)){ 
     var foldcon = array[i].substr(array[i].indexOf("/") + 1); 
     var folder = array[i].substr(0, array[i].indexOf("/")); 
     foldcon = foldcon.split(","); 
     for (n = 0; n < foldcon.length; n++){ 
      foldcon[n] = folder + "/" + foldcon[n] 
      if (foldcon[n].indexOf(".") == (-1)){ 
       console.log([foldcon[n]]); 
       foldcon[n] = getAllSub([foldcon[n]]);   

      } 
     } 
     array.splice(i, 1, foldcon); 

    } 

} 


return array; 
} 
array = getAllSub(array); 
console.log(array); 

眼下這段代碼讀取目錄,它承認,如果文件的陣列中的一個項目是文件夾,但它不會從子目錄中的文件添加到陣列中正確。現在,它有點無限遞歸,我真的不知道如何阻止它。 這並不意味着是什麼我真的要使用,我只是認爲這將是一個很好的項目合作上介紹自己的node.js

的編輯^

+0

這不是這裏的工作方式。你應該重新接受我的回答,併爲這個問題開始另一個問題 – ControlAltDel 2012-04-29 03:59:40

回答

2

var fs = require('fs'); 

var array = fs.readdirSync(__dirname); 
for (i = 0; i < array.length; i++){ 
    if (array[i].indexOf(".") == (-1)) 
    { 
     // you need to use the return value from concat 
     array = array.concat(array[i] + "/" + fs.readdirSync(__dirname + "/" + array[i])); 
     console.log('if executed'); 
    } 

} 
console.log(array); 
3
的基本知識

我知道這是晚了,但這是一個遞歸解決方案來讀取子文件夾中的文件路徑的正確答案:

var fs = require("fs"); 

/** 
* Recurse through a directory and populate an array with all the file paths beneath 
* @param {string} path   The path to start searching 
* @param {array} allFiles  Modified to contain all the file paths 
*/ 
function readdirSyncRecursive(path, allFiles) { 
    var stats = fs.statSync(path); 
    if (stats.isFile()) { 
     // base case 
     allFiles.push(path); 
    } else if (stats.isDirectory()) { 
     // induction step 
     fs.readdirSync(path).forEach(function(fileName) { 
      readdirSyncRecursive(path + "/" + fileName, allFiles); 
     }); 
    } 
} 

var allFiles = []; 
readdirSyncRecursive("/path/to/search", allFiles); 
console.info(allFiles);