Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Twit的重复输出(NPM模块和TwitterAPI)_Javascript_Node.js_Express_Twitter_Socket.io - Fatal编程技术网

Javascript Twit的重复输出(NPM模块和TwitterAPI)

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()将它们发送到客户端 我认为正在发生的是,客户端仍然连接

我正在建立一个投资组合网站,我想集成一个实时推特订阅源。我正在使用Node、Socket.IO、Express和Twit。我让流工作并将tweet输出到页面,但是当客户端刷新或断开连接并重新连接时,tweet就会被复制,就像我收到多条相同的tweet一样。代码的服务器端使用Twit连接到Twitter API,以从Twitter的公共流中获取一个流,该流包含关于所提供的hashtag的所有tweet,然后使用
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密钥。