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"