Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.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
Javascript Node.JS中的流媒体_Javascript_Node.js - Fatal编程技术网

Javascript Node.JS中的流媒体

Javascript Node.JS中的流媒体,javascript,node.js,Javascript,Node.js,如果我正在流式传输数据,并且希望在流式传输后能够访问整个数据,我想知道良好的做法 我是这样流的: res._oldWrite = res.write; res.write = function (chunk, encoding, cb) { var decoded = chunk.toString(encoding); write.write(new Buffer(decoded, encoding), encoding, cb);

如果我正在流式传输数据,并且希望在流式传输后能够访问整个数据,我想知道良好的做法

我是这样流的:

    res._oldWrite = res.write;
    res.write = function (chunk, encoding, cb) {
        var decoded = chunk.toString(encoding);
        write.write(new Buffer(decoded, encoding), encoding, cb);
        return res._oldWrite.call(res, new Buffer(decoded, encoding), encoding, cb);
    }
现在我想访问我的数据,我做了如下操作:

    res._oldWrite = res.write;
    var jsonData = '';
    res.write = function (chunk, encoding, cb) {
        var decoded = chunk.toString(encoding);
        jsonData += decoded;
        write.write(new Buffer(decoded, encoding), encoding, cb);
        return res._oldWrite.call(res, new Buffer(decoded, encoding), encoding, cb);
    }

    res.on('finish', function(){
        // Now I can have access to jsopnData but it is gross ; what is the right way?
    })

但是没有更好的方法吗?

所以我不能100%肯定我理解你的问题@Web Developer,但是既然你要求代码,下面就是我的全部意思

请注意,可能还有其他较短的方法来做同样的事情(但我不确定您所说的“流媒体后访问整个数据”-存储在内存中?一次全部?等等):


那么,您正在将数据流传输到可写流,并希望访问该数据?为什么不直接通过管道连接到自定义流中的另一个流?然后,您可以向第二个流添加一个列表器来获取数据。很抱歉,我没有理解您的意思,您可以在我的代码中向我展示您的解决方案吗…您应该从流中读取,而不是拦截
。write()
对它的调用@Bergi谢谢,但请您在我的代码中详细说明您的解决方案,以便我能更好地理解谢谢。。。
var dataStream = require('stream').Writable();
//I'm assuming the "real processing" is saving to a file
var fileStream = fs.createWriteStream('data.txt');
var masterStream = require('stream').Writeable();

masterStream._write = function (chunk, enc, next) {

  dataStream.write(chunk);
  fileStream.write(chunk);
  next();
};

//if you now write to master stream, you get values in both dataStream and fileStream
//you can now listen to dataStream and "have access to the data"