[英]how to stream from nodejs server to client
我目前正在尝试发送一个非常长的csv文件,该文件将在浏览器中处理。
我想将其流式传输到客户端,因为它将超出字符串大小限制,并且还会占用服务器中过多的内存。
我努力了
app.get('/test', (req, res)=>{
let csvStream = byline(fs.createReadStream('./resources/onescsv.csv'));
csvStream.on('data', (line)=>{
csvStream.pipe(res);
});
csvStream.on('end', () => {
res.render('./test/test', {
css:['test/test.css'],
js:['test/test.js']
})
})
});
当我执行上述操作时,它将读取的流发送到客户端,但是将其呈现到我不想要的页面上。 我希望能够在客户端javascript中按缓冲区接收流缓冲区,以便在流进来时处理流,例如将它们放入表中。 我怎样才能做到这一点?
首先,您不想在同一请求中调用render
,而是希望将数据通过管道传递到响应中。 你想把它们分开
要呈现页面,只需将默认路由发送到页面HTML
app.get('/', (req, res) => {
res.render('./test/test', {
css: ['test/test.css'],
js: ['test/test.js']
});
});
然后进行流传输,在服务器端调整您的代码,例如
app.get('/api/csv', (req, res) => {
let stream = fs.createReadStream('./resources/onescsv.csv');
stream = byline.createStream(stream);
stream.pipe(res);
stream.on('end', res.end);
});
然后在客户端的默认HTML页面上,加载(或挂断按钮),触发AJAX请求以拉下CSV数据,例如使用jQuery
$.get('/api/csv', data => {
// do something with CSV data
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.