[英]Piping oboe.js parsed json to http response object in Node.js
我正在使用Oboe.js來從Node readStream解析JSON,我想將其發送回客戶端以節省內存的方式請求它。 是否可以將數據從Oboe的node
或path
事件傳遞到Node.js HTTP響應對象,以便我可以將已解析的數據即時傳遞給客戶端,而不是全部收集並立即發送? 這是我到目前為止的代碼:
const express = require('express');
const app = express();
const PORT = 3000;
const oboe = require('oboe');
const fs = require('fs');
app.get('/download', (req, res) => {
const jsonDataStream = fs.createReadStream('./citylots.json');
oboe(jsonDataStream)
.node('features.*', function(feature) {
// res.send is non-streaming. how to stream?
res.send(feature);
});
});
app.listen(PORT, () => console.log(`up on port ${ PORT }!`));
對於您的特定問題,我認為問題與res.send
終止響應( docs )有關。 鑒於res
是可寫流,您可以調用res.write
將字符串寫入響應。 您將需要做一些額外的工作來插入逗號以及開始的[
和]
。
const express = require('express');
const app = express();
const PORT = 3000;
const oboe = require('oboe');
const fs = require('fs');
app.get('/download', (req, res) => {
const jsonDataStream = fs.createReadStream('./citylots.json');
oboe(jsonDataStream)
.node('features.*', function(feature) {
res.write(JSON.stringify(feature));
});
});
app.listen(PORT, () => console.log(`up on port ${ PORT }!`));
但是要退一步,我想確保Oboe適合您的用例。 這可能會使您的實現復雜化,而沒有太多好處。 您的目標是通過減少向客戶端發送數據來減少內存嗎? 換句話說,您是否要避免發送所有citylots.json
,而只希望發送其features
?
我認為您需要的是繼續發送數據而不將整個文件保存在內存中。
因此,您需要使用管道。 管道將使您可以分塊發送數據
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.