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:
// 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:
node dir.jsNota: Este ejecutará el script tomando como base el directorio donde se encuentra el dir.js (.).
O:
node dir.js ./../Nota: Este ejecutará el script, tomando el directorio superior a donde se encuentra dir.js.
O pasarle alguna otra ruta.