Node js Streams Tutorial: Filestream, Pipes

En este tutorial, aprenderá

Filestream en Node.js

Node hace un uso extensivo de las secuencias como un mecanismo de transferencia de datos.

Por ejemplo, cuando envía cualquier cosa a la consola mediante la función console.log, en realidad está utilizando una secuencia para enviar los datos a la consola.

Node.js también tiene la capacidad de transmitir datos de archivos para que puedan leerse y escribirse apropiadamente. Ahora veremos un ejemplo de cómo podemos usar flujos para leer y escribir desde archivos. Tenemos que seguir los pasos mencionados a continuación para este ejemplo

Paso 1) Crear un archivo llamado data.txt que tiene los datos siguientes. Supongamos que este archivo se almacena en la unidad D de nuestra máquina local.

Tutorial sobre Node.js

Introducción

Eventos

Generadores

Conectividad de datos

Uso de Jasmine

Paso 2) Escriba el código relevante que hará uso de flujos para leer datos del archivo.

Explicación del código: –

  1. Primero necesitamos incluir los módulos ‘fs’ que contienen toda la funcionalidad necesaria para crear flujos.
  2. A continuación, creamos un flujo legible mediante el método — CreateReadStream. Como entrada, damos la ubicación de nuestro archivo data.txt.
  3. La función steam.on es un controlador de eventos y en ella, estamos especificando el primer parámetro como ‘datos’. Esto significa que cada vez que los datos llegan a la secuencia del archivo, luego ejecute una función de devolución de llamada. En nuestro caso, estamos definiendo una función de devolución de llamada que llevará a cabo 2 pasos básicos. La primera es convertir los datos leídos del archivo como una cadena. El segundo sería enviar la cadena convertida como salida a la consola.
  4. Estamos tomando cada fragmento de datos que se lee desde el flujo de datos y convertirlo en una cadena.
  5. Finalmente, estamos enviando la salida de cada fragmento convertido de cadena a la consola.

Salida:

  • Si el código se ejecuta correctamente, verá la salida anterior en la consola. Esta salida será la misma que en el archivo data.txt.

Escribir en un archivo

De la misma manera, que creamos una secuencia de lectura, también podemos crear una secuencia de escritura para escribir datos en un archivo. Primero vamos a crear un archivo vacío sin contenido llamado data.txt. Supongamos que este archivo se coloca en la unidad D de nuestro ordenador.

El siguiente código muestra cómo podemos escribir datos en el archivo.

Explicación del código: –

  1. Estamos creando una secuencia grabable mediante el método — CreateWriteStream. Como entrada, damos la ubicación de nuestro archivo data.txt.
  2. A continuación usamos el stream.write un método para escribir las diferentes líneas de texto en nuestro archivo de texto. La secuencia se encargará de escribir estos datos en el archivo data.txt.

Si abre el archivo data.txt, ahora verá los siguientes datos en el archivo

Tutorial sobre Node.js

Introducción

Eventos

Generadores

Conectividad de datos

Uso de Jasmine

Tuberías en Node.js

Dentro de las aplicaciones de Node, los flujos se pueden canalizar juntos mediante el método pipe (), que toma dos argumentos:

  • Una secuencia de escritura requerida que actúa como destino para los datos y
  • Objeto opcional que se utiliza para pasar opciones.

Un ejemplo típico del uso de tuberías, si desea transferir datos de un archivo a otro.

Así que veamos un ejemplo de cómo podemos transferir datos de un archivo a otro usando tuberías.

Paso 1) Crear un archivo llamado datainput.txt que tiene los datos siguientes. Supongamos que este archivo se almacena en la unidad D de nuestra máquina local.

Tutorial sobre Node.js

Introducción

Eventos

Generadores

Conectividad de datos

Uso de Jasmine

Paso 2) Crear un archivo vacío en blanco llamado DataOutput.txt y colocarlo en la unidad D de su máquina local.

Paso 3) Escriba el siguiente código para llevar a cabo la transferencia de datos desde el archivo datainput.txt al archivo DataOutput.txt.

Explicación del código: –

  1. Primero estamos creando un “readstream” a nuestro archivo datainput.txt que contiene todos nuestros datos que necesitan ser transferidos al nuevo archivo.
  2. Luego necesitamos crear un “writestream” a nuestro archivo DataOutput.txt, que es nuestro archivo vacío y es el destino para la transferencia de datos desde el archivo datainput.txt.
  3. A continuación, utilizamos el comando pipe para transferir los datos del readstream a la secuencia de escritura. El comando pipe tomará todos los datos que entran en el readstream, y lo empujará a la writestream.

Si ahora abre el archivo DataOutput.txt, verá todos los datos que estaban presentes en el archivo datainput.txt.

Eventos en Node.js

Los eventos son uno de los conceptos clave en Node.js y, a veces, Node.js se conoce como un marco impulsado por eventos.

Básicamente, un evento es algo que sucede. Por ejemplo, si se establece una conexión a una base de datos, se activa el evento de conexión a la base de datos. La programación impulsada por eventos es crear funciones que se activarán cuando se activen eventos específicos.

Veamos un ejemplo básico de definir un evento en Node.js.

Vamos a crear un evento llamado ‘data_received’. Cuando se activa este evento, el texto “datos recibidos” se enviará a la consola.

Explicación del código: –

  1. Utilice la función require para incluir el módulo ‘events’. Con este módulo, usted será capaz de crear eventos en Node.js.
  2. Crear un nuevo emisor de eventos. Esto se utiliza para vincular el evento, que en nuestro caso es “data_received” a una función de devolución de llamada que se define en el paso 3.
  3. Definimos una función impulsada por eventos que dice que si en caso de que se active el evento “data_received”, entonces deberíamos enviar el texto “data_received” a la consola.
  4. Finalmente, tenemos un disparador manual de nuestro evento usando la función EventeMiter.emit. Esto activará el evento data_received.

Cuando se ejecuta el programa, el texto “datos recibidos” se enviará a la consola como se muestra a continuación.

Emisión de eventos

Al definir eventos, existen diferentes métodos para eventos que se pueden invocar. Este tema se centra en mirar cada uno de ellos en detalle.

1. Controladores de eventos de una sola vez

A veces puede estar interesado en reaccionar a un evento solo la primera vez que ocurre. En estas situaciones, puede utilizar el método once ().

Veamos cómo podemos hacer uso del método once para manejadores de eventos.

Explicación del código: –

  1. Aquí estamos usando el método ‘once’ para decir que para el evento ‘data_received, ‘la función de devolución de llamada sólo debe ejecutarse una vez.
  2. Aquí estamos activando manualmente el evento ‘data_received’.
  3. Cuando el evento ‘data_received’ se activa de nuevo, esta vez, no pasará nada. Esto se debe al primer paso en el que dijimos que el evento solo podía desencadenarse una vez.

Si el código se ejecuta correctamente, la salida en el registro será ‘data_received correctamente’. Este mensaje solo aparecerá una vez en la consola.

2. Inspección de detectores de eventos

En cualquier momento de su vida útil, un emisor de eventos puede tener cero o más oyentes conectados a él. Los detectores de cada tipo de evento se pueden inspeccionar de varias maneras.

Si está interesado en determinar únicamente el número de oyentes adjuntos, no busque más allá del método EventEmitter.ListenerCount ().

(Nota: Los oyentes son importantes porque el programa principal debe saber si se están agregando oyentes sobre la marcha a un evento; de lo contrario, el programa funcionará mal porque se llamará a otros oyentes.)

Explicación del código: –

  1. Estamos definiendo un tipo EventEmitter que es necesario para utilizar los métodos relacionados con eventos.
  2. A continuación, estamos definiendo un objeto llamado emisor que se utilizará para definir nuestros manejadores de eventos.
  3. Estamos creando 2 manejadores de eventos que básicamente no hacen nada. Esto se mantiene simple para nuestro ejemplo solo para mostrar cómo funciona el método ListenerCount.
  4. Ahora, cuando invoque el método ListenerCount en nuestro evento data_received, enviará el número de detectores de eventos asociados a este evento en el registro de la consola.

Si el código se ejecuta correctamente, el valor de 2 se mostrará en el registro de la consola.

3. El evento NewListener

Cada vez que se registra un nuevo controlador de eventos, el emisor de eventos emite un evento NewListener. Este evento se utiliza para detectar nuevos controladores de eventos. Normalmente se utiliza NewListener evento cuando se necesita asignar recursos o realizar alguna acción para cada nuevo controlador de eventos.

Explicación del código: –

  1. Estamos creando un nuevo controlador de eventos para el evento ‘newListener’. Por lo tanto, cada vez que se registra un nuevo controlador de eventos, el texto “Added listener for” + el nombre del evento se mostrará en la consola.
  2. Aquí estamos escribiendo en la consola el texto “Added listener for” + el nombre del evento para cada evento registrado.
  3. Estamos definiendo 2 manejadores de eventos para nuestro evento ‘data_received’.

Si el código anterior se ejecuta correctamente, el siguiente texto se mostrará en la consola. Simplemente muestra que el controlador de eventos ‘newListener’ se activó dos veces.

Se ha añadido un detector de eventos data_received

Se ha añadido un detector de eventos data_received

Resumen

  • Las secuencias se utilizan en Node.js para leer y escribir datos desde dispositivos de entrada/salida. Node.js hace uso de la biblioteca ‘fs’ para crear flujos legibles y grabables a los archivos. Estas secuencias se pueden utilizar para leer y escribir datos de archivos.
  • Las tuberías se pueden utilizar para conectar varias secuencias entre sí. Uno de los ejemplos más comunes es canalizar la secuencia de lectura y escritura para la transferencia de datos de un archivo a otro.
  • Node.js a menudo también se etiqueta como un marco impulsado por eventos, y es muy fácil definir eventos en Node.js. Se pueden definir funciones que responden a estos eventos.
  • Los eventos también exponen métodos para responder a eventos clave. Por ejemplo, hemos visto el controlador de eventos once () que se puede utilizar para asegurarse de que una función de devolución de llamada sólo se ejecuta una vez cuando se activa un evento.
0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *