Я кодирую httpfileserver. Он не использует базу данных, а сохраняет файлы на жестком диске, как и любой другой файл.
Чтобы сделать его более эффективным, он отвечает объектом JavaScript, содержащим все файлы и каталоги в иерархии файлов. в. Это идея по крайней мере. Я не могу сделать функцию, которая делает это, так как я не могу найти способ заставить динамически генерируемые «пути» в объекте идти «достаточно глубоко».
Функция тока, которую я получил, работает, взявкаталог шаг вниз в объекте. Однако это работает только на шаг вниз. Он терпит неудачу, когда это на несколько шагов вниз, и поэтому не может обрабатывать более сложные иерархии каталогов.
Я использую fs для чтения каталогов и файлов.
Пример ожидаемого вывода работающей функции:
jsobject = {file0: {
filename : "sample.txt",
content : "this is sample.txt"
},
directory0 : {
dirname : "directory",
content : {
file0 : {
filename: "sample2.txt",
content : "this is sample2.txt"
},
directory0 : {
dirname : "directory2,",
content : {}
}
}
}
}
Функция:
function readdir(dirtoread, subto) {
if (dirtoread === undefined) {
var dirtoread = fs.readdirSync("./Files", {encoding: "utf8"})[_.size(fs.readdirSync("./Files", {encoding: "utf8"})) - 1];
}
var fncounter = 0;
var dircounter = 0;
var files = fs.readdirSync("./Files/" + dirtoread,{encoding:"utf8"});
for(var i = 0; i < _.size(files); i++) {
if(files[i].toString().indexOf(".") !== -1) {
var nfile = "file" + fncounter;
var fname = files[i];
if(subto != undefined) {
var fcontent = fs.readFileSync("Files/" + dirtoread + "/" + files[i], {encoding:"utf8"});
json[subto].content[nfile] = {filename : fname,
content: fcontent
};
} else {
var fcontent = fs.readFileSync("Files/" + dirtoread + "/" + files[i], {encoding:"utf8"});
json[nfile] = {filename : fname,
content: fcontent
};
}
fncounter++;
} else {
var ndir = "directory" + dircounter;
var dname = files[i];
var nextdir = "/" + dirtoread + "/" + dname;
if (subto != undefined) {
json[subto].content[ndir] = {dirname : dname,
content: {}
}
readdir(nextdir, ndir);
}else {
json[ndir] = {dirname : dname,
content: {}
}
readdir(nextdir, ndir);
}
dircounter++;
}
}
dirtoread = "not set";
}