Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文件作为json传输到expressjs和res_Json_Node.js_Express_Stream_Pipe - Fatal编程技术网

将文件作为json传输到expressjs和res

将文件作为json传输到expressjs和res,json,node.js,express,stream,pipe,Json,Node.js,Express,Stream,Pipe,快速提问,伙计们。我想我把逻辑搞糟了,但我搞砸了,因为express没有管道方法 不管怎样,我有这个作为我的快速端点 app.get('/:report/top', function(req, res) { readDataTop(global[req.params.report], function(err, obj) { res.header("Cache-Control", "max-age=3600"); res.json(obj); }); }); 目

快速提问,伙计们。我想我把逻辑搞糟了,但我搞砸了,因为express没有管道方法

不管怎样,我有这个作为我的快速端点

app.get('/:report/top', function(req, res) {
    readDataTop(global[req.params.report], function(err, obj) {
    res.header("Cache-Control", "max-age=3600");
    res.json(obj);
    });
});
目前我正在做这件事,以获取数据

function readDataTop (x, callback) {
    console.log("Read "+x[6]+" and Sent Cached Top Half");
    jf.readFile( "loadedreports/top"+x[6], 'utf8', callback);
};
jf只是让编写json.parse和try/catch块变得更容易,我不想只使用fs.readfile,我想打开一个流,因为这些文件越来越大

我如何通过管道将内容表达出来,但仍然使用json? 像这样的

function readDataTop (x, callback) {
    console.log("Read "+x[6]+" and Sent Cached Top Half");
    var rstream = fs.createReadStream("loadedreports/top"+req.params.report+".json");
        rstream.pipe(callback); 
};

有什么想法吗?Req未定义,但我认为我正确地通过了管道?

你所做的没有意义。要点是:回调需要内存中的整个文件/对象,因此也必须更改。如果你想要溪流,那么你需要一路溪流。您可以使用另一个流来代替回调,该流将在一行/数据/结果出现时处理一行/数据/结果,通过管道将其传输到另一个流,该流可以进行写入或聚合等操作。因此,我必须通过管道将其传输到writestream,并让express侦听数据事件?那么在每一个数据事件上,express res.json是哪一行呢?这会给我完整的json作为一个对象吗?我基本上希望节点读取文件,将其流式传输,以表示在ajax请求下哪个节点将其流式输出。客户端应该只看到一个JSON对象正在加载,当它被完全接收时,就对它做些什么。可能吗?