我如何检查var是否是Nodejs中的可读流?
示例:
function foo(streamobj){
if(streamobj != readablestream){
// Error: no writable stream
}else{
// So something with streamobj
}
}
我试过
if (!(streamobj instanceof stream.Readable)){
但是我得到一个ReferenceError:没有定义流
答案 0 :(得分:10)
您的问题肯定是您没有要求stream
。但。 instanceof
不是检查变量是否为可读流的好方法。考虑以下情况:
stream.Stream
)的实例; data
和end
事件的发射器; Readable
)的pipe
的实例; 最好的方法是https://github.com/isaacs/readable-stream。基本上,如果您要转到pipe
流,请检查它是否有on
方法,如果您要收听事件,请检查流是否有{{1}}方法等。
答案 1 :(得分:6)
您似乎忘了要求流核心模块。
var stream = require('stream');
// somewhere in the file
if (!(streamobj instanceof stream.Readable)) {
// Your logic
}
答案 2 :(得分:3)
使用is-stream包:
var isStream = require('is-stream');
if (isStream.readable(myStream)) {
do();
}

答案 3 :(得分:2)
确保你这样做:
var stream = require('stream');
该功能可能类似于:
function isReadableStream(obj) {
return obj instanceof stream.Stream &&
typeof (obj._read === 'function') &&
typeof (obj._readableState === 'object');
}
console.log(isReadableStream(fs.createReadStream('car.jpg'))); // true
console.log(isReadableStream({}))); // false
console.log(isReadableStream(''))); // false