无法使用Node.js从嵌套目录获取文件内容
我正在尝试使用node.js从目录中读取文件内容。但那个文件夹可能又有一些嵌套目录,所以我需要读取根目录中的每个文件。我在下面解释我的代码无法使用Node.js从嵌套目录获取文件内容,node.js,fs,Node.js,Fs,我正在尝试使用node.js从目录中读取文件内容。但那个文件夹可能又有一些嵌套目录,所以我需要读取根目录中的每个文件。我在下面解释我的代码 checkDirectory = async (path) => { let fileArr = []; let flag = 0; if (!_.isEmpty(path)) { fs.readdirSync(`${path}`).forEach(f1 => { fs.lstat
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
文件夹中是否存在任何嵌套文件夹,并读取这些嵌套目录中的所有文件<代码>检查目录方法用于从嵌套目录读取文件
我需要读取
uploads
目录中的所有文件,并将它们推送到dataArr
。读取所有文件后,然后console.log('dataArr',dataArr)代码>应该执行。根据我当前的代码,这个控制台消息从一开始就在执行并抛出一些错误。请帮助我解决此错误,并根据预期结果执行脚本。请等待checkDirectory,然后再使用它。您可以通过将函数转换为承诺来实现这一点。你可以有这样的东西:
checkDirectory = (path) => {
return new Promise((resolve, reject) => {
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) { // why do you need this
return resolve(fileArr);
}
});
}
然后像这样使用它:
let fileContentArr = await checkDirectory(fullPath);
请等待checkDirectory,然后再使用它。您可以通过将函数转换为承诺来实现这一点。你可以有这样的东西:
checkDirectory = (path) => {
return new Promise((resolve, reject) => {
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) { // why do you need this
return resolve(fileArr);
}
});
}
然后像这样使用它:
let fileContentArr = await checkDirectory(fullPath);
为什么checkDirectory(fullPath)中没有返回代码>?不应该是返回checkDirectory(fullPath)代码>为什么在检查目录(fullPath)中没有返回代码>?不应该是返回checkDirectory(fullPath)代码>