使用socket.io/node.js在网页上显示stream媒体Twitter

我正在尝试使用node.js socket.io和twit构build一个Twitterstream式web应用程序。

var express = require('express') , app = express() , http = require('http') , server = http.createServer(app) ,Twit = require('twit') , io = require('socket.io').listen(server); server.listen(8080); // routing app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); var watchList = ['love', 'hate']; io.sockets.on('connection', function (socket) { console.log('Connected'); var T = new Twit({ consumer_key: '' , consumer_secret: '' , access_token: '' , access_token_secret: '' }) T.stream('statuses/filter', { track: watchList },function (stream) { stream.on('tweet', function (tweet) { io.sockets.emit('stream',tweet.text); console.log(tweet.text); }); }); }); 

这是我的客户端

  <script src="/socket.io/socket.io.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script> <script> $(function(){ var socket = io.connect('http://localhost:8080'); socket.on('tweet', function(tweet) { $( '<div class="tweet">' + tweet.text + '</div>'); }); }); </script> </div> 

当我运行节点app.js并尝试连接到本地主机:8080我只是得到一个空白页,即使一切(soket.io,jquery,…)似乎已经正确加载。

以下是服务器输出的示例:

 info - socket.io started debug - served static content /socket.io.js debug - client authorized info - handshake authorized pwH0dbx4WvBhzSQXihpu debug - setting request GET /socket.io/1/websocket/pwH0dbx4WvBhzSQXihpu debug - set heartbeat interval for client pwH0dbx4WvBhzSQXihpu debug - client authorized for debug - websocket writing 1:: debug - websocket writing 5:::{"name":"stream","args":["RT @mintycreative: Great to chat today RT @SharonHolistic: Treatments available tomorrow http://t.co/5Poq3KU08u Book yours now #WestMidsHou…"]} 

debugging – websocket写作5 ::: {“name”:“stream”,“args”:[“RT @laurenpeikoff:#BREAKING @ScottsdalePD证实 – 警方正在调查迈克尔·比斯利涉嫌性侵犯@ 12News @ azcentr …” }

希望你能帮我纠正我的错误。

问题解决了

这里的代码没有任何错误:(服务器端)

 var express = require('express') , app = express() , http = require('http') , server = http.createServer(app) ,Twit = require('twit') , io = require('socket.io').listen(server); server.listen(8080); // routing app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); var watchList = ['love', 'hate']; var T = new Twit({ consumer_key: '' , consumer_secret: '' , access_token: '' , access_token_secret: '' }) io.sockets.on('connection', function (socket) { console.log('Connected'); var stream = T.stream('statuses/filter', { track: watchList }) stream.on('tweet', function (tweet) { io.sockets.emit('stream',tweet.text); }); }); }); 

(客户端)

  <script src="/socket.io/socket.io.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script> <script> var socket = io.connect('http://localhost:8080'); socket.on('stream', function(tweet){ $('#tweetd').append(tweet+'<br>'); }); </script> <div id="tweetd"></div> </div> 

第一个问题是每次打开一个套接字连接时你正在构造一个新的twitter侦听器。 你应该移动connection事件之外。 这可能不理想。 我不确定twitter模块是如何在内部处理的,但是实际上每次连接websocket时都可能创build一个到他们的API的新连接。

在客户端你jQuery可能会有点不同。 如果您只是想在每次发布tweet时向页面添加推文,请使用$('body').append()将新推文添加到body元素$('body').append()

请参阅此要点以供参考。