首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node-js twitter json

node-js twitter json
EN

Stack Overflow用户
提问于 2011-01-08 20:58:29
回答 1查看 2.8K关注 0票数 3

我正在试着用node.js写一个简单的应用程序来从推特上获取一些json。

json第一次加载正常,但是我的'tweets‘事件没有被正确触发。

有人知道我哪里错了吗?任何建议都非常感谢!

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-08 22:14:52

这里有两个问题:

  1. httpClient.request就是这样,一个一次性的间隔request.
  2. You're不会将函数getTweats传递给interval,而是它的返回

为了修复它,每次调用getTweats都要创建一个新的请求

代码语言:javascript
复制
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

代码语言:javascript
复制
setInterval(getTweats, 1000);

附言: Thx的主旨!我花了15秒才弄明白,当人们发布超过5行脱离上下文的代码时,总是很棒的:)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4633975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档