Leer archivo en Node.js

Shraddha Paghdar 12 octubre 2023
Leer archivo en Node.js

En este breve artículo, aprenderemos a leer archivos en Node.js.

Leer archivo en Node.js

El módulo fs proporciona muchas funciones útiles para acceder e interactuar con el sistema de archivos. Una característica especial del módulo fs es que todos los métodos son asíncronos de forma predeterminada, pero también pueden funcionar de forma síncrona agregando sincronización.

Usaremos fs.readFile() para leer un archivo en Node.js. Debe pasar la ruta del archivo, la codificación y una función de devolución de llamada para invocar los datos del archivo o el error.

El método fs.readFile() es un método integrado que se utiliza para leer el archivo. Lee todo el archivo en el búfer. El método require() se usa para cargar el módulo como const fs = require('fs').

Sintaxis:

fs.readFile(filename, encoding, callbackFn)

Este método acepta los tres parámetros.

  1. nombre de archivo: este parámetro obligatorio contiene el nombre del archivo para leer o la ruta completa si se almacena en otra ubicación.
  2. codificación: este parámetro es un parámetro obligatorio que contiene la codificación del archivo. Su valor por defecto es utf8.
  3. callbackFn: esta función de devolución de llamada se llamará después de que se haya leído el archivo. Toma dos parámetros, err y data.
Parámetros callbackFn Descripción
err Si se produjo algún error al leer el archivo.
data Contenido del archivo que se está leyendo.

Devuelve el contenido, los datos almacenados en el archivo o se encuentra un error al leer el archivo. Entendámoslo con un ejemplo.

Código:

const fs = require('fs');
fs.readFile('/helloworld.txt', 'utf8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(data);
});

Producción :

Hello DelftStack readers!

Otra opción es utilizar la versión síncrona fs.readFileSync().

Código:

const fs = require('fs');
try {
  const fileContent = fs.readFileSync('/helloworld.txt', 'utf8');
  console.log(fileContent);
} catch (err) {
  console.error(err);
}

Producción :

Hello DelftStack readers!

También podemos utilizar el método fsPromises.readFile() que ofrece el módulo fs/promises.

Código:

const fsPromises = require('fs/promises');

async function FileReadFn() {
  try {
    const fileContent =
        await fsPromises.readFile('/helloworld.txt', {encoding: 'utf8'});
    console.log(fileContent);
  } catch (err) {
    console.log(err);
  }
}
FileReadFn();

Producción :

Hello DelftStack readers!

Los tres de fs.readFile(), fsPromises.readFile() y fs.readFileSync() leen todo el contenido del archivo en la memoria antes de devolver los datos. Esto significa que los archivos grandes tendrán un gran impacto en el uso de la memoria y la velocidad de ejecución del programa.

En lugar de esperar a que el archivo termine de leerse, comenzamos a transmitir al cliente HTTP tan pronto como tengamos un dato listo para enviar. Los flujos ofrecen esencialmente dos ventajas principales sobre el uso de otros métodos de procesamiento de datos.

  1. Eficiencia de la memoria: no tiene que cargar grandes cantidades de datos en la memoria antes de procesarlos.
  2. Eficiencia del tiempo: lleva mucho menos tiempo comenzar a procesar los datos, ya que puede comenzar a procesar inmediatamente en lugar de esperar hasta que esté disponible toda la carga útil.

En el flujo de archivos, se llama al método pipe(), y toma la fuente y la dirige a un destino. El flujo de destino es el valor de retorno del método pipe(), que es algo muy útil que nos permite encadenar varias llamadas a pipe() juntas.

Código:

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

const nodeServer = http.createServer((req, res) => {
  const fileStream = fs.createReadStream(`${__dirname}/helloworld.txt`);
  fileStream.pipe(res);
});
nodeServer.listen(3000);

Producción :

Hello DelftStack readers!
Shraddha Paghdar avatar Shraddha Paghdar avatar

Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.

LinkedIn