我在使用 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)
});
读取大小递归():
// 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);
}
});
}