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
实例); - 对象可以是只有
data
和end
事件的发射器; - 对象可以是来自外部模块的
Readable
实例( https://github.com/isaacs/readable-stream );
最好的方法是鸭子打字 。 基本上,如果你要pipe
stream,检查是否有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