Lección 09. Ejemplo de código utilizando métodos nativos.

Después de aprender los módulos nativos existentes en Node.js, realicemos un ejemplo de código que los utilice:

Código de ejemplo (un `dir`)._

El siguiente código, realiza un listado de directorios al ser ejecutado:

El código utiliza los módulos de fs y path:

Copiar código
// Importa el módulo 'fs/promises' para trabajar con el sistema de archivos de manera asíncrona.

const fs = require("node:fs/promises");

// Importa el módulo 'path' para manejar rutas de archivos y directorios.
const path = require("node:path");

// Obtiene el primer argumento de la línea de comandos como el directorio a listar.
// Si no se proporciona, usa el directorio actual (".").
const folder = process.argv[2] ?? ".";

async function ls(folder) {
  let files;

  try {
    // Lee el contenido del directorio especificado.
    files = await fs.readdir(folder);
  } catch {
    // Si hay un error al leer el directorio, muestra un mensaje de error y termina el programa.
    console.error(`No se pudo leer el directorio: ${folder}`);
    process.exit(1);
  }

  // Mapea cada archivo o directorio en una promesa que obtiene su información.
  const filesPromises = files.map(async file => {
    // Construye la ruta absoluta del archivo/directorio.
    const filePath = path.join(folder, file);
    let stats;

    try {
      // Obtiene las estadísticas del archivo/directorio.
      stats = await fs.stat(filePath);
    } catch {
      // Si hay un error al obtener las estadísticas, muestra un mensaje y termina el programa.
      console.error(`No se pudo leer el directorio: ${filePath}`);
      process.exit(1);
    }

    // Determina si es un directorio o un archivo.
    const isDirectory = stats.isDirectory();
    const fileType = isDirectory ? "d" : "f";

    // Obtiene el tamaño del archivo en bytes.
    const fileSize = stats.size;

    // Obtiene la fecha de última modificación en formato legible.
    const fileModified = stats.mtime.toLocaleString();

    // Retorna una cadena formateada con la información del archivo/directorio.
    return `${fileType} ${file.padEnd(20)} ${fileSize.toString().padStart(10)} ${fileModified}`;
  });

  // Espera a que todas las promesas se resuelvan para obtener la información de los archivos.
  const fileInfo = await Promise.all(filesPromises);

  // Muestra la información de cada archivo en la consola.
  fileInfo.forEach(fileInfo => console.log(fileInfo));
}

// Llama a la función con el directorio especificado.
ls(folder);

Nota: Supongamos que nuestro archivo se llama dir.js, podemos ejecutarlo con el comando:

Copiar código
node dir.js

Nota: Este ejecutará el script tomando como base el directorio donde se encuentra el dir.js (.).

O:

Copiar código
node dir.js ./../

Nota: Este ejecutará el script, tomando el directorio superior a donde se encuentra dir.js.

O pasarle alguna otra ruta.