2013-07-08 25 views
1

我最近構建了一個小節點程序,能夠以console.log的形式精確路徑的所有文件。 結果我從這個函數得到看起來像這樣的實例:使用Node.js將URL /路徑轉換爲Json

/Volumes/TimeCapsule/movies/movie1 
movie1.mp4 
/Volumes/TimeCapsule/movies/movie2 
movie2.mp4 
/Volumes/TimeCapsule/movies/movie3 
movie3.mp4 

現在我的問題是:我怎麼能管理到每個這種路徑JSON的轉換,所以我可以能夠爲實例,以顯示所有文件電影文件夾在一個單一的HTML頁面?

我想有這樣的事情:

{ "Volumes": { 
      "TimeCapsule": { 
          "Movies":{ 
            "Title": "Movie1" 
            "Title": "Movie2" 
            "Title": "Movie3" 
            } 
          } 
      } 

} 

預先感謝您。

這裏的方式是我走功能:

var fs = require('fs'); 
var walk = function (currentPath) { 
console.log(currentPath); 
var files = fs.readdirSync(currentPath); //Returns array of filename in currenpath 
for (var i in files) { 
    var currentFile = currentPath + '/' + files[i]; 
    var stats = fs.statSync(currentFile); 
    if (stats.isFile()) { 
    console.log(currentFile.replace(/^.*[\\\/]/, ''));); 
    } 
    else if (stats.isDirectory()) { 
     walk(currentFile); 
     } 
} 
}; 

回答

0

這是我真正想要的,我甚至增加了一個路徑段,所以我可以對每個單個文件的路徑訪問:

var fs = require('fs'), 
    path = require('mypath') 

function walk(path) { 
    var stats = fs.lstatSync(mypath), 
     info = { 
     path: mypath, 
     Title: path.basename(mypath) 
    }; 

if (stats.isDirectory()) { 
    info.type = "folder"; 
    info.children = fs.readdirSync(filename).map(function(child) { 
     return walk(mypath + '/' + child); 
    }); 
} else { 
    info.type = "file"; 
} 

return info; 
} 


console.log(walk('/Users/maximeheckel/Desktop')); 

謝謝您的幫助。

3

OK,我們開始吧:

var fs = require("fs"); 
function walk(path, arr) { 
    var ret = {}; 
    arr = Array.isArray(arr) ? arr : []; 

    fs.readdirSync(path).forEach(function(item) { 
     var current = path + "/" + item; 
     var stats = fs.statSync(current); 
     if (stats.isFile()) { 
      arr.push(current); 
     } else if (stats.isDirectory()) { 
      walk(current, arr); 
     } 
    }); 

    arr.forEach(function(item) { 
    var i, len; 
     item.split("/").reduce(function(obj, path, i, parts) { 
      if ((i + 1) === parts.length) { 
       obj.Title = path; 
      } else { 
       obj[ path ] = obj[ path ] || {}; 
       return obj[ path ]; 
      } 
     }, ret); 
    }); 

    return ret; 
} 

這並沒有進行測試,但也許它給你如何做到這一點的一些想法。

+0

謝謝你的幫助我會試一試! – MaximeHeckel

+0

它看起來像它的作品,但我有一個問題。您的漫遊功能只在標題部分放入它創建的第一個文件,然後探索另一個文件夾。我無法獲得文件夾的全部內容,但我只是簡單地爲我的項目添加一些限制(例如,僅將.mp4文件放入一個文件夾中,而沒有其他內容)謝謝您的幫助! – MaximeHeckel

+0

我不明白正是我想要的,這裏有一個例子: { 卷{}, timeCapsule {}, 電影{}, MOVIE1 {標題: 'movie1.mp4'}} – MaximeHeckel