nodejs:检查变量是否为可读流

时间:2014-05-27 08:58:29

标签: node.js

我如何检查var是否是Nodejs中的可读流?

示例:

function foo(streamobj){

   if(streamobj != readablestream){
       // Error: no writable stream
   }else{
      // So something with streamobj 
   }
}

我试过

if (!(streamobj instanceof stream.Readable)){

但是我得到一个ReferenceError:没有定义流

4 个答案:

答案 0 :(得分:10)

您的问题肯定是您没有要求stream。但。 instanceof不是检查变量是否为可读流的好方法。考虑以下情况:

  • 对象可以是旧式流(stream.Stream)的实例;
  • 对象可以只是dataend事件的发射器;
  • 对象可以是来自外部模块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