【问题标题】:Piping oboe.js parsed json to http response object in Node.js管道 oboe.js 将 json 解析为 Node.js 中的 http 响应对象
【发布时间】:2017-03-26 18:20:12
【问题描述】:

我正在使用 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 }!`));

【问题讨论】:

    标签: javascript json node.js express oboe.js


    【解决方案1】:

    对于您的具体问题,我认为问题与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 }!`));
    

    不过,为了避免这种情况,我想确保双簧管适合您的用例。它可能会使您的实施复杂化而没有太多好处。您的目标是通过向客户端发送更少的数据来减少内存吗?换句话说,您是否试图避免发送所有citylots.json 而只想发送其features

    【讨论】:

    • JuanCaicedo 我想我的问题是真的:双簧管是否有流接口,或者我需要使用另一个库,比如 highland.js,为此?我想避免一次在内存中缓冲整个 json 文件。为了回答你的最后一个问题,我只是选择了 features 对象而不是整个 json 用于实验目的,它背后没有任何具体意图。
    【解决方案2】:

    我认为您需要的是在不将整个文件保存在内存中的情况下继续发送数据。

    因此,您需要使用管道。管道将允许您使用块发送数据

    【讨论】:

      猜你喜欢
      • 2013-09-19
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 2017-12-04
      • 2013-02-16
      • 1970-01-01
      • 2022-08-20
      • 1970-01-01
      相关资源
      最近更新 更多