Trabajo con rutas de acceso de archivo en Node.js

Completado

Como nuevo desarrollador de Tailwind Traders, debe saber cómo administrar rutas de acceso a archivos y carpetas. Si se tuvieran muchos archivos o carpetas, crear las rutas de acceso manualmente puede resultar muy tedioso. Node.js proporciona algunas constantes y utilidades integradas para que crear rutas de acceso de archivos sea una tarea más sencilla.

Determinación del directorio actual con __dirname

A veces no sabe en qué directorio se está ejecutando el programa. Solo lo necesita para usar la ruta de acceso del directorio actual.

📂 stores
    📂 201
        📂 sales

Node.js expone la ruta de acceso completa al directorio actual a través de la constante __dirname.

console.log(__dirname);

Si ejecuta ese código desde la carpeta sales en la estructura de carpetas siguiente, el valor de _dirname es:

/stores/201/sales

Trabajar con rutas de acceso con el módulo "path"

Las rutas de acceso es un tema que surge tan a menudo que Node.js incluye un módulo denominado path dedicado expresamente para funcionar con rutas de acceso.

Al igual que el módulo fs, el módulo path se distribuye junto con Node.js y no es necesario instalarlo. Solo se tiene que hacer referencia a dicho módulo al inicio del archivo.

const path = require("path");

Combinar rutas de acceso con path.join

El módulo path funciona con el concepto de rutas de acceso de archivos y carpetas, que son simplemente cadenas. Por ejemplo, si se quiere obtener la ruta de acceso a la carpeta stores/201, se puede usar el módulo path para ello.

const currentPath = path.join("stores", "201");
console.log(currentPath); // stores/201

const fullPath = path.join(__dirname, "stores", "201");
console.log(fullPath); // /nodejs-files/stores/201

El motivo por el que usaríamos el módulo path en lugar de concatenar cadenas reside en que, de este modo, el programa puede ejecutarse en Windows o Linux. El módulo path aplica el formato adecuado a las rutas de acceso para cualquier sistema operativo en el que se ejecute. En el ejemplo anterior, path.join devolvería stores\201 en Windows, con una barra diagonal inversa en lugar de una barra diagonal.

Determinar las extensiones de nombres de archivos con path.extname

El módulo path también puede identificar la extensión de un nombre de archivo. Si tiene un archivo y quiere identificar si es JSON, puede usar el método path.extname.

console.log(path.extname("sales.json"));

La salida es la siguiente:

.json

Sugerencia

El módulo path no se preocupa de si algo realmente existe o no. Las rutas de acceso son algo conceptual, no físico. Solo se crean y analizan cadenas automáticamente.

Obtención de todo lo que es necesario saber sobre un archivo o ruta de acceso

El módulo path contiene muchos métodos diferentes que realizan diversas acciones. Sin embargo, con el método parse podemos obtener la mayor parte de la información que se necesita sobre una ruta de acceso o un archivo. Este método devuelve un objeto que contiene el directorio actual en el que se encuentra, el nombre del archivo, la extensión de nombre de archivo e incluso el nombre del archivo sin la extensión.

const currentPath = path.parse("stores/201/sales.json")
console.log(currentPath);

const fullPath = path.join(__dirname, "stores", "201", "/sales.json");
console.log(path.parse(fullPath));

La salida es:

{
  root: '',
  dir: 'stores/201',
  base: 'sales.json',
  ext: '.json',
  name: 'sales'
}
{
  root: '/',
  dir: '/workspaces/node-essentials/nodejs-files/stores/201',
  base: 'sales.json',
  ext: '.json',
  name: 'sales'
}

Aunque existen muchos métodos más útiles en el módulo path, los métodos que se explican aquí son los conceptos básicos que probablemente se usen con más frecuencia. En el siguiente ejercicio, se usará el módulo path para crear rutas de acceso e identificar archivos .json.