ccc

Mostrando entradas con la etiqueta Node Steams. Mostrar todas las entradas
Mostrando entradas con la etiqueta Node Steams. Mostrar todas las entradas

Node: Enviar por http un fichero mediante stream

const http = require("http")
const {createReadStream} = require("fs")

const serverAux = http.createServer(function(req,res) {
   const fileStream = createReadStream("./data/bigFile.txt", "utf-8")
   fileStream.on('data',function(chunk) {
     fileStream.pipe(res)
   })

   fileStream.on('error', function(error) {
     console.log(error)
   })
})

serverAux.listen(3000);
console.log("servidor escuchando en el port 3000");
Para verlo entrar en navegador en:
http://localhost:3000

Está hecho con functions pero tb se puede poner con funciones de flecha, por ejemplo:
fileStream.on('data',(chunk) => {
   fileStream.pipe(res)
})

Node.js Streams

Crear un archivo de texto
const {writeFile} = require("fs/promises")
const createBigFile = async() => {
   await writeFile("./data/bigFile.txt","hola mundo".repeat(100000))
}
createBigFile()

Leer un archivo inmenso de grande poco a poco (mediante streaming):
const {createReadStream} = require("fs")
const stream = createReadStream("./data/bigFile.txt","utf-8")

// chunk lo que hace es leerlo por partes (buffer) así no carga el inmenso archivo de golpe
stream.on('data',(chunk) => {
   console.log(chunk)
})
stream.on('end',(chunk) => {
   console.log("Ya terminó del todo")
})
stream.on('error',(chunk) => {
   console.log("Vaya, se ha producido un error al leer")
})

INCISO: Todo esto está hecho con funciones de flecha pero a mí me resulta más intuitivo hacerlo con function como siempre, por ejemplo:
stream.on('end', function(chunk) {
   console.log("Ya terminó del todooo")
})