node.js に問題があります。コードでわかるように、私がやろうとしているのは、「./」+req.user.email でディレクトリの配列を取得し、それらをループしてサイズを調べ、出力にテーブル行を追加することです。最後に、res.send() を使用してすべてのテーブル行を送信したくありません。
ただし、私が得ている唯一の出力は次のとおりです。
<tr></tr>
配列内の各ファイルに対して。forEach 関数は readSizeRecursive をまったく待っていないようです。readSizeRecursive 関数は非同期であり、それが問題の原因だと思いますが、これを修正する方法がわかりません。
readSizeRecursive 関数も含めました。ありがとうございました!
var output = "";
fs.readdir("./" + req.user.email, function (err, files) {
files.forEach(function(file){
output += "<tr>";
readSizeRecursive("./"+req.user.email+"/"+file, function (err, total){
output += '<td>' + file + '</td><td>' + total + '</td>';
});
output += "</tr>"
});
res.send(output)
});
readSizeRecursive() :
// Function to find the size of a directory
function readSizeRecursive(item, cb) {
fs.lstat(item, function(err, stats) {
var total = stats.size;
if (!err && stats.isDirectory()) {
fs.readdir(item, function(err, list) {
async.forEach(
list,
function(diritem, callback) {
readSizeRecursive(path.join(item, diritem), function(err, size) {
total += size;
callback(err);
});
},
function(err) {
cb(err, total);
}
);
});
}
else {
cb(err, total);
}
});
}