2013-10-17 29 views
1

我有在node.js中看看JSONStream,和我想以下的小應用程序得到它的一個句柄:JSONStream的基本試驗不工作

var JSONStream = require('JSONStream'); 
var Stream = require('stream'); 

var s = new Stream(); 
s.pipe = function(dest) { 
    dest.write('{"foo":1}'); 
    return dest; 
}; 

var parser = JSONStream.parse(/foo/); 
s.pipe(parser).pipe(process.stdout); 

不幸的是,當運行命令行,這不會寫任何東西到控制檯。我究竟做錯了什麼?

+0

'parser'是否也有'pipe()'函數定義?如果沒有,'return dest;'這行可以改爲'return arguments.callee;',這樣就不會在'parser'上調用對'.pipe(process.stdout)'的鏈接調用。 – Gus

回答

1

它的工作原理,如果你重寫代碼:

var JSONStream = require('JSONStream'); 
var Stream = require('stream'); 

var s = new Stream(); 
s.pipe = function(dest) { 
    dest.write('{"foo":1}'); 
    return dest; 
}; 

var parser = JSONStream.parse(); 
parser.on('data', function(obj) { 
    console.log('obj', obj); 
}); 
s.pipe(parser); 

的原因,你不能管的JSONStream.parse()輸出到process.stdoutJSONStream輸出對象,process.stdout只接受字符串(也可能是緩衝區):

> process.stdout.write({ foo : 1 }); 
TypeError: invalid data 
    at WriteStream.Socket.write (net.js:612:11) 
    ... 
+0

這提醒了我爲什麼我更喜歡靜態類型語言......:/ – thecoop

+0

@thecoop這會給你一個類似的錯誤:'process.stdin.pipe(JSONStream.parse())。pipe(process.stdout); '。不完全知道爲什麼它不是在您的示例中生成的。 – robertklep