首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管道oboe.js将json解析为Node.js中的http响应对象

管道oboe.js将json解析为Node.js中的http响应对象
EN

Stack Overflow用户
提问于 2017-03-27 02:20:12
回答 2查看 480关注 0票数 0

我正在使用Oboe.js从Node readStream中解析JSON,我希望以一种节省内存的方式将其发送回请求它的客户机。是否可以通过管道将来自Oboe的nodepath事件的数据传送到Node.js HTTP响应对象,这样我就可以将解析后的数据动态传递给客户端,而不是收集完整的数据并一次性全部发送?这是我到目前为止所拥有的代码:

代码语言:javascript
复制
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 }!`));
EN

回答 2

Stack Overflow用户

发布于 2017-03-27 11:13:21

对于您的特定问题,我认为问题与res.send终止响应(docs)的事实有关。由于res是一个可写流,您可以调用res.write向响应中写入一个字符串。你将不得不做一些额外的工作来插入逗号以及开始的[]

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2017-03-28 08:13:50

我认为您需要的是保持发送数据,而不将整个文件保存在内存中。

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43032763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档