nodejs:检查variables是否是可读的stream

我如何检查一个var是否是Nodejs中可读的stream?

例:

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

我试过了

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

但比我得到一个ReferenceError:stream未定义

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

  • 对象可以是旧式stream( stream.Stream实例);
  • 对象可以是只有dataend事件的发射器;
  • 对象可以是来自外部模块的Readable实例( https://github.com/isaacs/readable-stream );

最好的方法是鸭子打字 。 基本上,如果你要pipestream,检查是否有pipe方法,如果你要听事件,检查stream是否有方法等。

看来你忘了需要stream核心模块。

 var stream = require('stream'); // somewhere in the file if (!(streamobj instanceof stream.Readable)) { // Your logic } 

使用is-stream包:

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

确保你做到:

 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