Javascript Twit的重复输出(NPM模块和TwitterAPI)
我正在建立一个投资组合网站,我想集成一个实时推特订阅源。我正在使用Node、Socket.IO、Express和Twit。我让流工作并将tweet输出到页面,但是当客户端刷新或断开连接并重新连接时,tweet就会被复制,就像我收到多条相同的tweet一样。代码的服务器端使用Twit连接到Twitter API,以从Twitter的公共流中获取一个流,该流包含关于所提供的hashtag的所有tweet,然后使用Javascript Twit的重复输出(NPM模块和TwitterAPI),javascript,node.js,express,twitter,socket.io,Javascript,Node.js,Express,Twitter,Socket.io,我正在建立一个投资组合网站,我想集成一个实时推特订阅源。我正在使用Node、Socket.IO、Express和Twit。我让流工作并将tweet输出到页面,但是当客户端刷新或断开连接并重新连接时,tweet就会被复制,就像我收到多条相同的tweet一样。代码的服务器端使用Twit连接到Twitter API,以从Twitter的公共流中获取一个流,该流包含关于所提供的hashtag的所有tweet,然后使用io.sockets.emit()将它们发送到客户端 我认为正在发生的是,客户端仍然连接
io.sockets.emit()
将它们发送到客户端
我认为正在发生的是,客户端仍然连接并接收推文,然后在重新连接时再次接收推文
这是我的后端代码,接下来是我的客户端代码(计划将其重构为多个模块)。底部提供的图片
谢谢你在这方面的帮助,到目前为止,我对Node一直很满意
var express = require('express');
var app = express();
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(3000);
//To Do refactor
app.get('/style.css', function(req, res) {
res.sendFile(__dirname + "/public/style.css");
});
app.get('/feed.html', function (req, res) {
res.sendFile(__dirname + "/public/feed.html");
});
app.get('/index.html', function (req, res) {
res.sendFile(__dirname + "/public/index.html");
});
app.get('/', function (req, res) {
res.sendFile(__dirname + "/public/index.html");
});
app.get('/contact.html', function (req, res) {
res.sendFile(__dirname + "/public/contact.html");
});
app.get('/work.html', function (req, res) {
res.sendFile(__dirname + "/public/work.html");
});
app.get('/social.html', function (req, res) {
res.sendFile(__dirname + "/public/social.html");
});
app.get('/about.html', function (req, res) {
res.sendFile(__dirname + "/public/about.html");
});
var Twit = require('twit');
var watchList = ['#USA'];
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) {
if(tweet.text !== undefined){
//console.log(tweet.text);
io.sockets.emit('stream',tweet.text);
}
});
socket.on('disconnect', function(){
console.log('Disconnected');
});
});
这是我的客户端代码:
<script>
var socket = io.connect('http://localhost:3000');
var count = 0;
socket.on('stream', function(tweet){
if(count < 10) {
$('#tweetd').append(tweet + '<br>');
count++;
//console.log(count)
}
});
</script>
<div id="tweetd"></div>
</div>
var socket=io.connect('http://localhost:3000');
var计数=0;
socket.on('stream',函数(tweet){
如果(计数<10){
$(“#tweeted”).append(tweet+”
);
计数++;
//console.log(计数)
}
});
我会继续研究这个问题,看看是否能找到解决方案。我相信这对某些人来说是有点难测试的,因为他们必须从Twitter获得API密钥才能测试它。我会看看我是否可以得到一个临时的API密钥。我会继续努力,看看是否能找到解决方案。我相信这对某些人来说是有点难测试的,因为他们必须从Twitter获得API密钥才能测试它。我会看看是否可以得到一个临时的API密钥。