发出socket.io和sailsjs(Twitter API)

时间:2013-07-17 16:19:03

标签: node.js socket.io sails.js

我得到了twits,我在控制台中打印所有这些都好,但我想将数据发送到视图,我不知道如何使用socketio来做。

任何想法?

var TwitterController = {

'index': function(req,res) {

var twitter = require('ntwitter');

var twit = new twitter({
  consumer_key: '...',
  consumer_secret: '...',
  access_token_key: '...',
  access_token_secret: '...'
});

twit.stream('statuses/filter', { track: ['dublin', 'spain']} , function(stream) {
  stream.on('data', function (data) {
    console.log(data.user.screen_name + ': ' + data.text);

    req.socket.emit('tweet', {
                    user: data.user.screen_name,
        text: data.text
    });

  });
});
       res.view();
},
};
module.exports = TwitterController;

并且在视图中我正在尝试打印所有的twits

<ul class="tw"></ul>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost:1337');


  jQuery(function($){
    var twList = $('ul.tw');
  });

  socket.on('tweet', function (data) {
    twList.prepend('<li>' + data.user + '</li>');
  });
</script>

1 个答案:

答案 0 :(得分:4)

如果您尝试使用Sails v0.9,那么您可以更轻松地开箱即用,因为捆绑的示例会为您处理样板连接逻辑。

关键是,不要使用res.view(),而是使用res.json(tweets)投放推文。

在此示例中,您正在使用流,因此您可以利用res.pipe(stream)

然后你可以在前端使用sails.io.js向/twitter发送一个socket.io请求,并将结果用于娱乐和利润。

  

以下前端代码假设您正在使用Sails v0.9.x中捆绑的小型客户端SDK(sails.io.js):

socket.get('/twitter', function (tweets) {
  console.log('Got the following tweets from the server :: ', tweets);
}
  

请记住,socket.get只是socket.emit之上的便捷方法,可以与开箱即用的Sails路由器配合使用。如果你有不想通过HTTP访问的特定于pubsub的代码,你仍然可以做你喜欢的所有自定义socket.io。

     

sails.io.js还支持socket.postsocket.putsocket.delete,其API类似于可比较的jQuery AJAX方法(例如$.post