如何读取数组nodejs中存在的文件

How to read files present in array 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. 如果在 readFile 中找不到 "sample" 会怎样?
  2. 您当前将 data 推入 result 而不是 path
  3. 想想你想用 readFile 完成什么。对我来说,你想要做的是查看该文件是否有单词 "sample",如果有 return true,如果没有 return false。所以我将函数命名为 checkIfFileHasSample 并将其设为 return 布尔值。然后在你的 run 函数中,在 forEach 中你有 path,所以这是我将路径添加到结果列表的地方。
  4. 也许您已经意识到这一点,但 run 在您的代码示例中实际上从未 调用 。 IE。 run() 不会发生。

解决方案:

你有一些语法错误和 run 的异步等待。对于语法错误,它会随着经验而来,但我也建议使用 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();