对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 –
这样做,真的很感激它。 –