[英]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.