【发布时间】:2020-11-25 15:18:43
【问题描述】:
我正在尝试使用 node.js 从目录中读取文件内容。但是该文件夹可能还有一些嵌套目录,所以我需要读取根目录中存在的每个文件。我在下面解释我的代码。
checkDirectory = async (path) => {
let fileArr = [];
let flag = 0;
if (!_.isEmpty(path)) {
fs.readdirSync(`${path}`).forEach(f1 => {
fs.lstat(`${path}/${f1}`, (err, stat) => {
if (!err) {
if (stat.isFile()) {
flag = 1;
let rawdata = fs.readFileSync(`${path}/${f1}`, {
encoding: 'utf8',
flag: 'r'
});
fileArr.push({
rawContent: rawdata,
fileName: f1
});
}
if (stat.isDirectory()) {
flag = 0;
const fullPath = `${path}/${f1}`;
checkDirectory(fullPath);
}
}
})
})
}
if (falg === 1) {
return fileArr;
}
}
let dataArr = [];
fs.readdirSync(`${process.env['root_dir']}/uploads}`).forEach(f => {
fs.lstat(`${process.env['root_dir']}/uploads/${f}`, (err, stat) => {
if (!err) {
if (stat.isFile()) {
let outputObj = {};
let rawdata = fs.readFileSync(`${process.env['root_dir']}/uploads/${f}`, {
encoding: 'utf8',
flag: 'r'
});
if (!_.isEmpty(rawdata)) {
const contentToBase64 = Buffer.from(rawdata, "utf8").toString('base64');
outputObj = {
fileName: f,
fileData: contentToBase64
}
dataArr.push(outputObj);
}
}
if (stat.isDirectory()) {
const fullPath = `${process.env['root_dir']}/uploads/${f}`;
let fileContentArr = checkDirectory(fullPath);
for (let e of fileContentArr) {
if (!_.isEmpty(e.rawContent)) {
const contentToBase64 = Buffer.from(e.rawContent, "utf8").toString('base64');
outputObj = {
fileName: e.fileName,
fileData: contentToBase64
}
dataArr.push(outputObj);
}
}
}
}
});
})
}
console.log('dataArr', dataArr);
这里我试图从uploads 文件夹中读取文件内容。当我执行此代码时,它会引发以下错误。
错误:
dataArr []
/app/controller/usecaseWorkflowCtrl.js:135
for(let e of fileContentArr) {
^
TypeError: fileContentArr is not iterable
这里我也在检查uploads 文件夹中是否存在任何嵌套文件夹,并从这些嵌套目录中读取所有文件。 checkDirectory 方法用于从嵌套目录中读取文件。
我需要从 uploads 目录中读取所有文件并将它们推送到 dataArr 。读取所有文件后,console.log('dataArr', dataArr); 应该执行。根据我当前的代码,此控制台消息从头开始执行并引发一些错误。请帮我解决这个错误并按照我的预期结果执行脚本。
【问题讨论】:
-
为什么
checkDirectory(fullPath);没有返回?不应该是return checkDirectory(fullPath);