gpt4 book ai didi

javascript - 如何从nodejs服务器流式传输到客户端

转载 作者:行者123 更新时间:2023-11-30 11:32:13 25 4
gpt4 key购买 nike

我目前正在尝试发送一个非常长的 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 中逐个缓冲区接收流缓冲区,以便在流进入时对其进行处理,例如把它们放在一张 table 上。我该怎么做?

最佳答案

首先,您不希望在希望将数据通过管道传输到响应中的同一请求中调用 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
});

关于javascript - 如何从nodejs服务器流式传输到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45812943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com