對Node很新穎,我試圖在我的節點/快速應用中實現一個Twitter流。NodeJS請求不返回
此文件位於我的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);
};
我沒有看到問題,但我可以提供我的經驗 - 這是不值得直接與內置的http.request對象工作 - API太低級別太多,可以去的東西錯誤。使用請求庫,如https://npmjs.org/package/request –
這樣做,真的很感激它。 –