Oefening: bestanden en directory's maken

Voltooid

Als ontwikkelaar van Tailwind Traders hebt u een robuuste opdrachtregeltoepassing gemaakt in Node.js die elke mapstructuur kan lezen om bestanden te vinden met de extensie .json. U moet deze bestanden lezen om de gegevens hierin samen te vatten en vervolgens de totalen naar een nieuw bestand te schrijven in een nieuwe map met de naam salesTotals.

De salesTotals-directory maken

  1. Voeg in de main functie code toe aan:

    • (1) Maak een variabele met de naam salesTotalsDir, die het pad van de map salesTotals bevat.
    • (2) Maak de map als deze nog niet bestaat.
    • (3) Schrijf het totaal naar het bestand totals.txt.
     async function main() {
       const salesDir = path.join(__dirname, "stores");
    
       // (1) Create a variable called `salesTotalsDir`, which holds the path of the *salesTotals* directory.
       const salesTotalsDir = path.join(__dirname, "salesTotals");
    
       try {
         // (2) Create the directory if it doesn't already exist.
         await fs.mkdir(salesTotalsDir);
       } catch {
         console.log(`${salesTotalsDir} already exists.`);
       }
    
       // Calculate sales totals
       const salesFiles = await findSalesFiles(salesDir);
    
       // (3) Write the total to the "totals.txt" file with empty string `String()`
       await fs.writeFile(path.join(salesTotalsDir, "totals.txt"), String());
       console.log(`Wrote sales totals to ${salesTotalsDir}`);
     }
    
  2. Voer vanaf de terminalprompt het programma uit met de volgende code.

    node index.js
    
  3. Selecteer het pictogram Vernieuwen in de Bestandenverkenner om het nieuwe bestand te zien. U hebt het bestand gemaakt, maar de totalen zijn nog niet beschikbaar. De volgende stap is het lezen van de verkoopbestanden, het optellen van de totalen en het eindtotaal naar het nieuwe totals.txt-bestand schrijven. Vervolgens leert u hoe u gegevens in bestanden kunt lezen en parseren.

Vastgelopen?

Als u tijdens deze oefening niet meer weet hoe u verder moet, vindt u hier de volledige code tot nu toe.

const fs = require("fs").promises;
const path = require("path");

async function findSalesFiles(folderName) {

  // (1) Add an array at the top, to hold the paths to all the sales files that the program finds.
  let results = [];

  // (2) Read the currentFolder with the `readdir` method. 
  const items = await fs.readdir(folderName, { withFileTypes: true });

  // (3) Add a block to loop over each item returned from the `readdir` function using the asynchronous `for...of` loop. 
  for (const item of items) {

    // (4) Add an `if` statement to determine if the item is a file or a directory. 
    if (item.isDirectory()) {

      // (5) If the item is a directory,  recursively call the function `findSalesFiles` again, passing in the path to the item. 
      const resultsReturned = await findSalesFiles(path.join(folderName, item.name));
      results = results.concat(resultsReturned);
    } else {
      // (6) If it's not a directory, add a check to make sure the item name matches *sales.json*.
      if (path.extname(item.name) === ".json")
        results.push(`${folderName}/${item.name}`);
    }
  }


  return results;
}

async function main() {
  const salesDir = path.join(__dirname, "stores");

  // (1) Create a variable called `salesTotalsDir`, which holds the path of the *salesTotals* directory.
  const salesTotalsDir = path.join(__dirname, "salesTotals");

  try {
    // (2) Create the directory if it doesn't already exist.
    await fs.mkdir(salesTotalsDir);
  } catch {
    console.log(`${salesTotalsDir} already exists.`);
  }

  // Calculate sales totals
  const salesFiles = await findSalesFiles(salesDir);

  // (3) Write the total to the "totals.txt" file with empty string `String()`
  await fs.writeFile(path.join(salesTotalsDir, "totals.txt"), String());
  console.log(`Wrote sales totals to ${salesTotalsDir}`);
}

main();