Ответ 1
Чтобы создать свой собственный записываемый поток, у вас есть три возможности.
Создайте свой собственный класс
Для этого вам понадобится 1) расширить класс Writable 2), чтобы вызвать конструктор Writable в вашем собственном конструкторе. 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);
Расширить пустой 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);
Использовать API упрощенного конструктора
Если вы используете io.js, вы можете использовать упрощенный API-интерфейс конструктора:
var writable = new stream.Writable({
write: function(chunk, encoding, next) {
console.log(chunk.toString());
next();
}
});
Используйте класс ES6 в Node 4 +
class EchoStream extends stream.Writable {
_write(chunk, enc, next) {
console.log(chunk.toString());
next();
}
}