我目前正在尝试发送一个非常长的csv文件,该文件将在浏览器中处理。
我想将它流式传输到客户端,因为它会超出字符串大小限制,并且还会在服务器中占用太多内存。
我试过了
d3.select(options.element)
当我执行上述操作时,它会将读取流发送到客户端,但它会呈现给我不想要的页面。我希望能够通过客户端javascript中的缓冲区接收流缓冲区,以便在它们进入时处理流。把它们放在一张桌子里。我怎么能这样做?
答案 0 :(得分:2)
首先,您不希望在同一个请求中调用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
});