Módulos integrados de Node.js: process, path, fs, stream y http

En el desarrollo con Node.js es común utilizar módulos nativos como process, path, fs, stream y http. Estos proporcionan funcionalidades esenciales sin necesidad de paquetes externos. A continuación se muestran ejemplos reescritos con nombres de variibles alternativos y explicaciones claras.

Módulo path

Sirve para manipular rutas de archivos de forma segura e independiente del sistema operativo.

const path = require('path');

// Unir segmentos en una ruta
const rutaRelativa = path.join('plantilla', 'modulos', 'utilidades', 'herramienta.js');
// Resultado: plantilla/modulos/utilidades/herramienta.js

// Resolver ruta absoluta desde el directorio de trabajo
const rutaAbsoluta = path.resolve('datos', 'config', 'db.json');
// Ejemplo de salida: /home/usuario/proyecto/datos/config/db.json

// Obtener el último componente de una ruta
console.log(path.basename('scripts/app.js'));   // app.js
console.log(path.basename('scripts/app.js', '.js')); // app
console.log(path.basename('scripts/app.js', '.json')); // app.js

// Directorio contenedor
console.log(path.dirname('scripts/app.js')); // scripts
console.log(path.dirname('scripts/middleware/auth.js')); // scripts/middleware

// Extensión del archivo
console.log(path.extname('scripts/app.js')); // .js
console.log(path.extname('README.md'));      // .md

Módulo process

Proporciona información sobre el proceso actual y el entorno de ejecución.

const process = require('process');

// Argumentos enviados desde la terminal
const argumentos = process.argv.slice(2);

// Variable de entorno personalizada (ejemplo)
const apiBaseURL = process.env.API_BASE;

// Plataforma del sistema operativo
const plataforma = process.platform;

Sistema de archivos (fs)

Permite leer, escribir y manipular archivos.

const fs = require('fs');
const path = require('path');

// Información de un archivo o directorio
fs.stat('./iconos.js', (err, stats) => {
  if (!err) console.log(stats);
});

// Listar contenido de un directorio
fs.readdir('./src', (error, archivos) => {
  if (!error) console.log(archivos);
});

// Leer un archivo (ruta construida con process.cwd())
fs.readFile(
  path.join(process.cwd(), 'package.json'),
  'utf-8',
  (error, contenido) => {
    if (!error) console.log(contenido);
  }
);

// Escribir un archivo JSON con datos de ejemplo
const contenidoJson = `[
  { "id": 1, "nombre": "Elemento A" },
  { "id": 2, "nombre": "Elemento B" }
]`;
fs.writeFile(
  path.join(process.cwd(), 'salida.json'),
  contenidoJson,
  (error) => {
    if (error) console.error('Error al escribir:', error);
  }
);

Streams

Los flujos permtien procesar datos de manera eficiente, fragmento a fragmento.

const fs = require('fs');

// Lectura de un archivo mediante stream
const lector = fs.createReadStream('./package.json', 'utf-8');
lector.on('data', (trozo) => {
  console.log('Nuevo fragmento:');
  console.log(trozo);
});
lector.on('end', () => console.log('Lectura finalizada.'));
lector.on('error', (err) => console.error('Error:', err));

// Escritura con streams
const escritor1 = fs.createWriteStream('salida1.txt', 'utf-8');
escritor1.write('Línea uno del stream\n');
escritor1.write('Línea final.');
escritor1.end();

const escritor2 = fs.createWriteStream('salida2.txt');
escritor2.write(Buffer.from('Datos binarios con Buffer\n', 'utf-8'));
escritor2.write(Buffer.from('Fin.', 'utf-8'));
escritor2.end();

// Tubería: copiar contenido de un stream a otro
fs.createReadStream('./salida1.txt')
  .pipe(fs.createWriteStream('./copia.txt'));

Servidor HTTP

El módulo http permite crear servidores web ligeros.

const http = require('http');
const url = require('url');
const path = require('path');
const fs = require('fs');

// Servidor simple con respuesta estática
const serverBasico = http.createServer((peticion, respuesta) => {
  console.log(`${peticion.method} ${peticion.url}`);
  respuesta.writeHead(200, { 'Content-Type': 'text/html' });
  respuesta.end('<h1>Hola desde Node.js</h1>');
});
serverBasico.listen(8080, () => {
  console.log('Servidor corriendo en http://127.0.0.1:8080');
});

// Servidor de archivos estáticos (reescrito con otros nombres)
const directorioRaiz = path.resolve(process.argv[2] || '.');
console.log(`Sirviendo desde: ${directorioRaiz}`);

const servidorArchivos = http.createServer((peticion, respuesta) => {
  const rutaRequerida = url.parse(peticion.url).pathname;
  const rutaLocal = path.join(directorioRaiz, rutaRequerida);

  fs.stat(rutaLocal, (error, stat) => {
    if (!error && stat.isFile()) {
      console.log(`200 ${peticion.url}`);
      respuesta.writeHead(200);
      fs.createReadStream(rutaLocal).pipe(respuesta);
    } else {
      console.log(`404 ${peticion.url}`);
      respuesta.writeHead(404);
      respuesta.end('404 Recurso no encontrado');
    }
  });
});
servidorArchivos.listen(8081, () => {
  console.log('Servidor de archivos en http://127.0.0.1:8081/');
});

Etiquetas: Node.js Process PATH fs stream

Publicado el 10-22 00:10