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