如何使用节点js版本0.6.18输出twitter api respose

我想创build一个第一个节点的JS应用程序。 为此,我需要拉叽叽喳喳的公共Twitter和输出鸣叫作为请求响应。 我search了很多,但我得到的代码写在旧的节点版本代码(即createServer,addListener像这样)。 我们如何编写请求twitter调用的代码,并在节点版本0.6.18中输出json作为响应?

以下是我尝试的旧代码

var http = require("http"); var events = require("events"); var port = 8001; 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 + "/"); 

并得到错误

 $ node tweet.js Server running at http://localhost:8001/ timers.js:223 callback.apply(timer, args); ^ TypeError: Cannot call method 'apply' of undefined at Timer.ontimeout (timers.js:223:14) 

你的错误是常见的错误。 代替:

 setInterval(getTweats(), 1000); 

你需要

 setInterval(getTweats, 1000); 

这是因为你想setInterval调用getTweats函数本身

你的代码有getTweats()而不是括号。 这首先调用 getTweats ,并将结果提供setInterval 。 由于这个结果是undefined (你的函数不会返回任何东西),节点不能调用它。