我得到了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>
答案 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.post
,socket.put
和socket.delete
,其API类似于可比较的jQuery AJAX方法(例如$.post
)