2012-09-06 32 views
0

我試圖從Twitter的Streaming API管道()數據使用現代Node.js流的文件。我正在使用我編寫的名爲TweetPipe的庫,該庫利用了EventStreamRequestNode.js請求流結束/失速時,管道可寫入文件流

設置:

var TweetPipe = require('tweet-pipe') 
    , fs = require('fs'); 

var tp = new TweetPipe(myOAuthCreds); 
var file = fs.createWriteStream('./tweets.json'); 

管道輸出到標準輸出工程和流保持打開狀態:

tp.stream('statuses/filter', { track: ['bieber'] }) 
    .pipe(tp.stringify()) 
    .pipe(process.stdout); 

管道向文件中寫入一個鳴叫,然後流結束默默:

tp.stream('statuses/filter', { track: ['bieber'] }) 
    .pipe(tp.stringify()) 
    .pipe(file); 

誰能告訴我爲什麼會發生這種情況?

回答

0

很難說從你在這裏得到的信息,這聽起來像是在你期待之前清理出來的流。這可以通過多種方式觸發,參見https://github.com/joyent/node/blob/master/lib/stream.js#L89-112

流可能會發出'結束',然後就會停止。

雖然我懷疑這就是問題所在,一兩件事,關注我,這是 https://github.com/peeinears/tweet-pipe/blob/master/index.js#L173-174 破壞後應發出錯誤被稱爲

我通常會通過添加日誌記錄語句來調試這樣的問題,直到我可以看到什麼不是正確的。

你可以發佈一個腳本,可以運行重現嗎? (對於額外的點,包括一個package.json,它指定了依賴關係:)

+0

謝謝,@dominic。我會嘗試更多的日誌/調試。還有什麼令我費解的是,爲什麼這會發生在管道到文件但不是標準輸出時......儘管我想這表明它可能是發送'結束'的文件流。如果我仍然無法弄清楚,我會把精力集中在一起。 –

+0

好吧,我正在做點什麼。我正在使用直通流來過濾發出的消息類型:https://github.com/peeinears/tweet-pipe/blob/master/index.js#L125。當我通過流寫入函數添加this.resume()時,事情似乎有效。 –

0

根據this,您應該在由tp創建的流上創建一個錯誤處理程序。