用Node.js查询twitter api,但得到一个错误

我是node.js的新手,但我得到一个“写完”错误,我不知道为什么。 我知道还有其他类似的问题,但没有一个提供了我的问题的工作解决scheme,我试图查询Twitter的API。

req.on('end', function() { var string = JSON.parse(body); res.writeHead(200, { "Content-Type": "application/json" }); res.end(body); var tweetsArray = []; var finalTweets = []; client.get('search/tweets', { q: string.teamname, count: 1 }, function searchTweets(err, data, listStatuses) { for (var index in data.statuses) { var tweet = data.statuses[index]; tweetsArray.push(JSON.stringify(tweet.text)); } /* Callback function to query Twitter for statuses*/ client.get('statuses/user_timeline', { screen_name: string.teamname, count: 1 }, function listStatuses(err, data, response) { for (var index in data) { var tweet = data[index]; tweetsArray.push(JSON.stringify(tweet.text)); } var tweets = JSON.parse(tweetsArray[0]); var tweetsB = JSON.parse(tweetsArray[1]); finalTweets = tweets.concat(tweetsB); res.write(JSON.stringify(finalTweets)); res.end(); }); }); 

你在路由器的开始附近调用res.end() 。 这会结束响应,然后一旦你的callback被执行,你正在用res.write(JSON.stringify(finalTweets));再次写入响应res.write(JSON.stringify(finalTweets));

response.end([data] [,encoding] [,callback])

这个方法发信号给服务器所有的响应标题和主体已经被发送; 该服务器应该考虑完成此消息。 response.end()方法必须在每个响应中调用。

你叫res.end(body); 之前甚至调用client.get('search/tweets' 。然后你有res.write(JSON.stringify(finalTweets)); (和res.end()再次)你不能closureshttp响应,然后写到它。