我无法使用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调用,所以如果可能的话,我不想太多触摸它。