Node は初めてで、Twitter ストリームをノード/エクスプレス アプリに実装しようとしています。
このファイルは、routes フォルダー内の別の stream.js ファイル内にあり、クライアント側の jquery スクリプトから ajax 経由で呼び出されます。
他のいくつかのサイトで http.request を調べて比較し、複数の構成を試しましたが、何もうまくいきません。http.request コールバックまですべて発火するが、応答が得られない
var http = require('http')
, events = require('events')
, url = require('url')
, fs = require('fs')
, path = require('path')
, sys = require('sys')
, tweet_emitter = new events.EventEmitter()
, options = {
host: "api.twitter.com",
port: 80,
path: "/1/statuses/public_timeline.json",
method: "GET"
}
var getTweets = function() {
console.log('getTweets');// fires fine
var req = http.request( options, function( res ) {
console.log('STATUS: ' + res.statusCode);// nothing here executes
console.log('HEADERS: ' + JSON.stringify(res.headers));
var data = "";
res.setEncoding('utf8');
res.on('data',function( chunk ) {
data += chunk;
console.log(chunk);
});
res.on('end',function() {
var tweets = JSON.parse( data );
if( tweets.length ) tweet_emitter.emit( 'tweets', tweets )
})
req.end()
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
})
}
setInterval(getTweets, 5000 );
exports.stream = function(req, res){
var listener = tweet_emitter.addListener("tweets", function( tweets ) {
res.writeHead(200, { "Content-Type" : "text/plain" });
res.write( JSON.stringify(tweets) );
res.end();
clearTimeout(timeout);
});
var timeout = setTimeout(function() {
res.writeHead( 200, { "Content-Type" : "text/plain" });
res.write(JSON.stringify([]));
res.end();
tweet_emitter.removeListener(listener);
},10000);
};