簡體   English   中英

用管道將oboe.js解析為json到Node.js中的http響應對象

[英]Piping oboe.js parsed json to http response object in Node.js

我正在使用Oboe.js來從Node readStream解析JSON,我想將其發送回客戶端以節省內存的方式請求它。 是否可以將數據從Oboe的nodepath事件傳遞到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM