繁体   English   中英

如何从Node.js服务器流到客户端

[英]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 ,而是希望将数据通过管道传递到响应中。 你想把它们分开

  1. 渲染页面
  2. 启动流请求

要呈现页面,只需将默认路由发送到页面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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM