我正在试着用node.js写一个简单的应用程序来从推特上获取一些json。
json第一次加载正常,但是我的'tweets‘事件没有被正确触发。
有人知道我哪里错了吗?任何建议都非常感谢!
var twitterClient = http.createClient(80, 'api.twitter.com');
var tweetEmitter = new events.EventEmitter();
var request = twitterClient.request("GET", "/1/statuses/public_timeline.json", {"host": "api.twitter.com"});
function getTweats() {
request.addListener("response", function (response) {
var body = "";
response.addListener("data", function (data) {
body += data;
});
response.addListener("end", function (end) {
var tweets = JSON.parse(body);
if (tweets.length > 0) {
tweetEmitter.emit("tweets", tweets);
console.log(tweets, 'tweets loaded');
}
});
});
request.end();
}
setInterval(getTweats(), 1000);
http.createServer(function (request, response) {
var uri = url.parse(request.url).pathname;
console.log(uri);
if (uri === '/stream') {
var cb = function (tweets) {
console.log('tweet'); // never happens!
response.writeHead(200, {"Content-Type": "text/plain"});
response.write(JSON.stringify(tweets));
response.end();
clearTimeout(timeout);
};
tweetEmitter.addListener("tweets", cb);
// timeout to kill requests that take longer than 10 secs
var timeout = setTimeout(function () {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write(JSON.stringify([]));
response.end();
tweetEmitter.removeListener("tweets", cb);
}, 10000);
} else {
loadStaticFile(uri, response);
}
}).listen(port);
console.log("Server running at http://localhost:" + port + "/");查看完整的文件@ https://gist.github.com/770810
发布于 2011-01-08 22:14:52
这里有两个问题:
httpClient.request就是这样,一个一次性的间隔request.getTweats传递给interval,而是它的返回为了修复它,每次调用getTweats都要创建一个新的请求
function getTweats() {
// There's no need for request being global, just make it local to getTweats
var request = twitterClient.request("GET", "/1/statuses/public_timeline.json", {"host": "api.twitter.com"});并将函数正确地传递给setTimeout
setInterval(getTweats, 1000);附言: Thx的主旨!我花了15秒才弄明白,当人们发布超过5行脱离上下文的代码时,总是很棒的:)
https://stackoverflow.com/questions/4633975
复制相似问题