0

I am trying to read all json file using loop, in my application. Here is code to read a single file, which is working perfectly fine.

 const translations = require("../data/hello" + fileEndWith);

But there is 10+ files in directory translations, so I don't want to write same code for each files, instead of I want to read in loops.

let fs = require('fs');

let fileEndWith = "en.json";


fs.readdir("../data/", (err, fileNames) => {
    fileNames.forEach((fileName) => {
        if(fileName.indexOf(fileEndWith) != -1){
            // some code.....
        }
    });
});

but it is giving error, Can't resolve fs.

Programmer
  • 398
  • 1
  • 9
  • 33

1 Answers1

0

You can use procedures from cutie-fs library:

fs.readdir("../data/", (err, fileNames) => {
  let jsonFileNames = fileNames.filter(fileName => fileName.indexOf(fileEndWith) != -1);
  readDataFromFiles(jsonFileNames, {encoding: 'utf8'}, (error, dataObj) => {
    console.log(dataObj); // {fileName1: data1, fileName2: data2, ... } 
  });
});

Where readDataFromFiles is the following function

const readDataFromFiles = (files, options, callback) => {
  let contents = {};
  let count = 0;
  if (files.length === 0) {
   callback(null, contents);
  }
  files.forEach(file => {
    fs.readFile(file, options, (error, data) => {
      if (error) {
        callback(error);
      } else {
        contents[file] = data;
        count += 1;
        if (count === files.length) {
          callback(null, contents);
        }
      }
    });
   });
 }

This function you can find here

Also it's better use const for modules: const fs = require('fs');

Guseyn Ismayylov
  • 367
  • 5
  • 16