Home > Software design >  Issue with loading chunks into the client
Issue with loading chunks into the client

Time:08-20

I'm trying to create a readableStream through which I would send chunks of data ( html in this case ). The problem is that even if I manage to get a chunk of data the res.write() method does nothing and just returns false if I log it. I wonder why is that?

import { createServer } from 'http'
import { createReadStream } from 'fs'

const server = createServer((req, res) => {
    if (req.method === 'GET') {
        if (req.url === '/') {
            res.writeHead(200, { 'Content-Type': 'text/html' })

            let readStream = createReadStream('./src/public/index.html', { encoding: 'utf8' })

            readStream.on('data', (chunk) => {
                console.log(chunk)
                // html code
                res.write(chunk)
                // does nothing
            })
            res.end()
        }
    }
})

const PORT = 3000 || 8080

server.listen(PORT, () => { console.log(server.address()) })

CodePudding user response:

you should add a pipe function not a regular write to the response

  readStream.on('open', function () {
    // This just pipes the read stream to the response object (which goes to the client)
    readStream.pipe(res);
  });

  // This catches any errors that happen while creating the readable stream (usually invalid names)
  readStream.on('error', function(err) {
    res.status(500).end(err);
  });

for more information: https://nodejs.org/en/knowledge/advanced/streams/how-to-use-fs-create-read-stream/

I hope it help you :)

  • Related