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 :)