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

Node.js nodejs:检查变量是否为可读流,node.js,Node.js,如何检查变量是否是Nodejs中的可读流 例如: function foo(streamobj){ if(streamobj != readablestream){ // Error: no writable stream }else{ // So something with streamobj } } 我试过了 if (!(streamobj instanceof stream.Readable)){ 但是我得到了一个引用错误:没有定义流您

如何检查变量是否是Nodejs中的可读流

例如:

function foo(streamobj){

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

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

但是我得到了一个引用错误:没有定义流

您似乎忘记了需要流核心模块

var stream = require('stream');

// somewhere in the file
if (!(streamobj instanceof stream.Readable)) {
    // Your logic
}

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

  • 对象可以是旧式流(stream.stream的实例)
  • 对象可以是带有
    数据
    结束
    事件的发射器
  • 对象可以是可从外部模块()读取的
    实例
    
最好的办法是。基本上,如果您要使用
管道
流,请检查它是否有
管道
方法,如果您要收听事件,请检查流是否有
开启
方法等。

请确保:

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
使用软件包:

var isStream=require('is-stream');
if(isStream.readable(myStream)){
do();

}
谢谢-我使用if
(typeof streamobj.read!=“function”){
您还需要
可读的
事件,所以也要检查
上的
read
是一个很常见的名称,同样,
typeof streamobj.on==='function'
我知道这很旧,但是……到现在为止,可读流库是一个标准,实际上是由节点的开发团队维护的,其目的是维护一致性节点版本中的恶臭。也就是说,如果您想保证项目在节点版本之间工作,您应该始终使用可读流模块,而且此库始终返回核心流对象,因此不需要进行duck键入。正确的答案是使用instanceofPossible获得此处提供的解决方案is不会告诉你它是否是一个可读的流,你也不应该要求在另一个npm包中检查一些简单的固有语言
maybeStream instanceof require('stream')。stream==aBoolean
它会告诉你。为什么我们不需要一个包?我认为恰恰相反− 流不是语言的一部分,依赖一个包进行通用操作比在每个项目和其他项目中编写一段代码更好。