我想将数据从amazon kinesis流传输到s3日志(log)或bunyan日志(log).

该示例使用文件写入流或标准输出.我将如何实现自己的可写流?

//this works
var file = fs.createWriteStream('my.log')
kinesisSource.pipe(file)

说它没有"打开"的方法是行不通的

var stream = {}; //process.stdout works however
stream.writable = true;
stream.write =function(data){
    console.log(data);
};
kinesisSource.pipe(stream);

对于我自己的自定义可写流,我必须实现哪些方法?文档似乎表明我需要实现"写"而不是"开"

推荐答案

要创建自己的可写流,有三种可能性.

Create your own class

为此,您需要1)扩展可写类2)在自己的构造函数中调用可写构造函数3)在流对象的原型中定义一个_write()方法.

下面是一个例子:

var stream = require('stream');
var util = require('util');

function EchoStream () { // step 2
  stream.Writable.call(this);
};
util.inherits(EchoStream, stream.Writable); // step 1
EchoStream.prototype._write = function (chunk, encoding, done) { // step 3
  console.log(chunk.toString());
  done();
}

var myStream = new EchoStream(); // instanciate your brand new stream
process.stdin.pipe(myStream);

Extend an empty Writable object

您可以实例化一个空的Writable对象并实现_write()方法,而不是定义一个新的对象类型:

var stream = require('stream');
var echoStream = new stream.Writable();
echoStream._write = function (chunk, encoding, done) {
  console.log(chunk.toString());
  done();
};

process.stdin.pipe(echoStream);

Use the Simplified Constructor API

如果你使用io.js,你可以使用simplified constructor API:

var writable = new stream.Writable({
  write: function(chunk, encoding, next) {
    console.log(chunk.toString());
    next();
  }
});

Use an ES6 class in Node 4+

class EchoStream extends stream.Writable {
  _write(chunk, enc, next) {
    console.log(chunk.toString());
    next();
  }
}

Node.js相关问答推荐

monorepo内的NPM包使用不在注册表中的本地包

MongoDB-如何验证Document字段以仅允许特定的文件扩展名?

Firebase-admin筛选器.或只考虑第一个WHERE子句

在Nest.Js中,如何发送带有表单数据的正文请求并应用正文请求验证.附加的文件是可选的

是否可以在MongoDB中比较和匹配引用文档中的字段

未显示NPM版本

Mongoose:如何使用填充进行查找

如何使用 Node.js 连接到 Cloud SQL?

NodeJS:zlib.gzipSync 在不同平台上给出不同的明文输出

Node.js中使用ffmpeg如何获取视频截图的位置?

如何在套接字对象中存储或添加数据?

将 AllowDiskUse true 添加到 node.js 中的 MongoDB 聚合?

[NodeJs 从 ADAL 升级到 MSAL]:无法在字符串上创建属性authenticationScheme

错误:无法检测到网络(event="noNetwork",code=NETWORK_ERROR,version=providers/5.6.8)

Winston http 日志(log)级别的行为与 info 不同

如何在 NodeJS 中获取操作系统用户名?

node.js 是否支持yields ?

node/express:使用 Forever 连续运行脚本时设置 NODE_ENV

添加git信息到create-react-app

Firestore:多个条件 where 子句