Node.js – 我可以在Redis中将可写stream存储为JSON吗?

我仍然在充分理解node.js中的stream。 如果我创build了一个可写入的stream,我能够将stream对象作为JSON存储在Redis中,然后再访问它,然后继续写入(在JSON.parse之后)?

例:

var fs = require( 'fs' ); var redis = require( 'redis' ); var streamName = fs.createWriteStream(upfilePath, streamopts); streamName = JSON.stringify(streamName); rclient.set('streamJSON', streamName); .... var myNewdata = 'whatever'; rclient.get('streamJSON', function (err, streamJSON) { var recoveredStream = JSON.parse(streamJSON); recoveredStream.write(myNewdata, function (err, written, buffer) { //write successful?? } } 

你不能在redis上存储variables引用。 你只需要存储文件名,然后重新打开a标志,允许你附加数据的stream。

我认为这是一个非常有趣的问题,并创build了这个function,允许您保存一个stream的状态,然后再使用它。 但是,如果你只能使用a标志,我看不出这一点。 虽然可能对ReadableStreams有用。

 var fs = require('fs'); exports.stringify = function(stream) { var obj = { path: stream.path , writable: stream.writable , fd: stream.fd , options: { encoding: stream.encoding , mode: stream.mode } }; if (stream.writable) { obj.bytesWritten = stream.bytesWritten; } else { obj.options.bufferSize = stream.bufferSize; obj.bytesRead = stream.bytesRead; } return JSON.stringify(obj); }; exports.parse = function(json, callback) { var obj = JSON.parse(json); var stream; if (obj.writable) { obj.options.flags = 'a'; stream = fs.createWriteStream(obj.path, obj.options); stream.bytesWritten = obj.bytesWritten; } else { stream = fs.createReadStream(obj.path, obj.options); stream.bytesRead = obj.bytesRead; } // if stream was already opened, wait until it is if (obj.fd !== null) { stream.on('open', function() { callback(null, stream); }); } else { process.nextTick(function() { callback(null, stream); }); } return stream; };