ฉันต้องการความช่วยเหลือเพื่อทำความเข้าใจวิธีการทำงานของสตรีมใน NodeJS
ฉันอธิบายว่าฉันต้องเขียนโมดูลที่เรียกกระบวนการ UNIX (ด้วย spawn
) และฉันต้องการเปลี่ยนเส้นทาง stdout
ของกระบวนการนี้ไปยังสตรีมที่อ่านได้
ฉันต้องการให้พฤติกรรมนี้ exports
สตรีมที่อ่านได้ และอนุญาตให้โมดูลอื่นอ่านได้
เพื่อที่จะทำสิ่งนี้ ฉันได้เขียนโค้ดเล็กๆ น้อยๆ :
var spawn = require('child_process').spawn
var Duplex = require('stream').Duplex;
var stream = new Duplex;
var start = function() {
ps = spawn('mycmd', [/*... args ...*/]);
ps.stdout.pipe(stream);
};
exports.stream = stream;
exports.start = start;
แต่ถ้าฉันใช้โมดูลนี้ ฉันจะส่งข้อยกเว้นที่บอกว่าสตรีมไม่ได้ใช้เมธอด _read
คุณช่วยฉันแก้ปัญหานี้ได้ไหม?
ขอบคุณล่วงหน้า.
[แก้ไข] ฉันได้ลองใช้วิธีแก้ปัญหาในการสร้างวัตถุ Stream แล้ว แต่ไม่ได้ผล นี่คือโค้ด:
var spawn = require('child_process').spawn;
var Stream = require('stream');
var ps = null;
var audio = new Stream;
audio.readable = audio.writable = true;
var start = function() {
if(ps == null) {
ps = spawn('mycmd', []);
ps.stdout.pipe(stream);
}
};
var stop = function() {
if(ps) {
ps.kill();
ps = null;
}
};
exports.stream = stream;
exports.start = start;
exports.stop = stop;
แต่เมื่อฉันพยายามฟังสตรีม ฉันพบข้อผิดพลาดใหม่:
_stream_readable.js:583
var written = dest.write(chunk);
^
TypeError: Object #<Stream> has no method 'write'