使用socket.io监听控制器中发生的事件

时间:2017-03-19 05:06:57

标签: javascript node.js sockets

我无法使用websockets让后端向前端发送数据。我的控制器中的部分代码现在包含一个函数,其中代码的末尾接近结束:

编辑:整个函数通过另一个控制器的ajax调用

exports.twitterStream = function(filter){

if (stream !== null){
    stream.stop();
    console.log('Stream stop and restarting with new filter');
}

stream = T.stream('statuses/filter', { track: filter });

//When twitterStream init, start streaming
stream.on('tweet', function (tweet) {

    if(filter !== []){

        //Exclude all tweets with undefined hashtag
        //filter all hashtags out and concat #
        if (tweet.entities.hashtags !== undefined){
            var hashtagFilterNormalised = tweet.entities.hashtags.map(function(hashtag){
                return '#' + hashtag.text.toLowerCase();
            })  

            //create tweet objects
            var newTweet = new Tweet();
            var tweetDate = tweet.created_at.substring(4,10);
            newTweet.created = tweetDate;
            newTweet.text = tweet.text;
            newTweet.tag = hashtagFilterNormalised;

            //check with matching hashtag name in mongodb => returns an ARRAY of all matching hashtags
            Hashtag.find( {'tag': { $in: hashtagFilterNormalised } }, function(err, matchingHashtag){

                if (err){
                    return console.log(err);
                }

                //loop through all matching hashtags
                matchingHashtag.forEach(function(hashtag){

                    //push tweets to matching hashtag
                    hashtag.tweets.push(newTweet);

                    //save incoming tweet to DB
                    hashtag.save(function(err, hashtag){
                    if(err){
                        return console.log(err);
                    }
                    console.log('new tweet saved to DB');

                    //socket.tweetSaved(newTweet);

                    })
                })
            })
        }
    }
})

}

所以我的问题是,如何让我的后端socket.js文件从上面的控制器文件中侦听传入的事件,比如在我将hashtag保存到我的数据库集合时?我的socket.js文件代码:

module.exports = function(io){
console.log('server side socket connected');

// Add a connect listener
io.on('connection', function(socket){

//Push count of tweets when a new tweet is saved
**Event listener here to fire when hashtag.save invoked in controller**
    socket.emit('newTweet', function(confirm){
        //emit new tweet object to client-side
    })

我在其他地方搜索过其他一些答案,但我只能找到答案,告诉我将控制器包装为套接字侦听器。但是,我的控制器已经包含一个正在导出的整个函数,并通过其他地方的ajax调用,所以如果可能的话,我不想太多触摸它。

0 个答案:

没有答案