如何读取数组nodejs中的文件



我想知道在nodejs中阅读文件并搜索关键字sample

如果找到关键字,显示路径

const allfiles = [
'C:\Users\public',
'C:\Users\public\images',
'C:\Users\public\javascripts\index1.js',
'C:\Users\public\javascripts\index2.js'
]

const readFile = (path, opts = 'utf8') =>
new Promise((resolve, reject) => {
try{
let result=[];
fs.readFile(path, opts, (err, data) => {
if (err) reject(err)
else {
if(data.indexOf("sample")>=0){
result.push(data);
resolve(result);
}
}
})
}
catch (e) {
console.log("e", e);
}
})
const run = async () => {
allfiles.forEach(e=>{
const s = await readFile(e);
console.log(s);
})
}
run();
Expected Output
[
'C:\Users\public\javascripts\index1.js',
'C:\Users\public\javascripts\index2.js'
]

一些提示:

  1. "sample"不在readFile中时会发生什么?
  2. 您目前正在将data推入result而不是path
  3. 想想你想用readFile完成什么。对我来说,你要做的就是看看这个文件是否有"sample"这个词,如果有,返回true,如果没有返回false。所以我将函数命名为checkIfFileHasSample,并让它返回一个布尔值。然后在你的run函数中,在forEach中你有path,所以这就是我将路径添加到结果列表的地方。也许您已经意识到这一点,但是在代码示例中,run实际上从未称为。Ie。run()不发生

解决方案:

您有一些语法错误和run的async-await棘手的问题。对于语法错误,这是有经验的,但我也建议使用ESLint来帮助你捕获它们,以及确保你的代码总是正确缩进。

const fs = require("fs");
const allfiles = [
"C:\Users\public",
"C:\Users\public\images",
"C:\Users\public\javascripts\index1.js",
"C:\Users\public\javascripts\index2.js",
];
const checkIfFileHasSample = (path, opts = "utf8") =>
new Promise((resolve, reject) => {
fs.readFile(path, opts, (err, data) => {
if (err) {
reject(err);
} else {
if (data.includes("sample")) {
resolve(true);
} else {
resolve(false);
}
}
});
});
const run = async () => {
const results = [];
for (let i = 0; i < allFiles.length; i++) {
try {
const file = allFiles[i];
const hasSample = await checkIfFileHasSample(file);
if (hasSample) {
results.push(file);
}
} catch (e) {
console.log(e);
}
}
console.log(results);
};
run();

最新更新