如何使用socket.io

时间:2016-01-13 11:54:04

标签: angularjs node.js socket.io

所以我要做的就是创建一篇博文,让所有观看博客的人实时更新博客文章。现在我有了基本的应用程序设置,允许我列出所有帖子,创建帖子,将其保存到mongo并让它实时更新为创建帖子的人。标准SPA吧!?

所以我想我可以使用socket.io来实现所有观看者的实时更新。我设法将socket.io连接到所有观看者实时更新但使用提交表单中的数据的点,而不是像创建帖子的人一样从mongo返回结果。

因此,更新到所有观看者的帖子都缺少一些数据,例如由mongo创建的日期。

这是Admin Page,Form& NG-Repeat - 我很满意这段代码

<div ng-controller="postsController" class="col-sm-8">
                <h3>Posts Controller</h3>

                <form ng-submit="addPost()">
                  <label>Title: </label><br /><input type="text" ng-model="post.title" autofocus required></input><br />
                  <label>By: </label><br /><input type="text" ng-model="post.by" required></input><br />
                  <label>Body: </label><div text-angular colorpicker ng-model="post.body" ></div><br />
                  <button type="submit">Post</button>
                </form>

                <br />

                <div ng-repeat="post in posts | orderBy: '-created_at' | limitTo: 1">
                    <div>
                        Title: {{ post.title }} <br />
                        Created: {{ post.created_at | date: 'MMM d, y' }} - By: {{ post.by }} <br /><br /> 
                        <div ta-bind ng-model="post.body">{{ post.body }}</div>
                    <hr />
                    </div>
                </div>

</div>

这是博客页面

<div ng-repeat="post in posts | filter:search | orderBy: 'created_at'">
                    <div>
                        Title: {{ post.title }} <br />
                        Created: {{ post.created_at | date: 'MMM d, y' }} - By: {{ post.by }} <br /><br /> 
                        <div ta-bind ng-model="post.body">{{ post.body }}     
                        </div>
                    <hr />
                    </div>
 </div>

这是Angular postsController&amp; socket.io监听器

myApp.controller('postsController', ['$scope', '$location', 'postService', 'socketio', function($scope, $location, postService, socketio) {

$scope.posts = postService.querying();

socketio.on('post', function(msg) {
     //var msgPost = 
     $scope.posts.push(msg);
     console.log(msg);
     //console.log(msgPost);
});

$scope.addPost = function () {
        postService.create($scope.post)
          .$promise.then(
                function(result) {
                    $scope.posts = result; 
                    $scope.post = {};
                    console.log(result);
                }    
            );
};

}]);

这是NodeJS postsController&amp; socket.io发射器

var Post = require('../models/Posts');

module.exports.create = function (req, res) {
var post = new Post(req.body);
post.save(function (err) {

  Post.find({}, function (err, results) {
  res.json(results);
  io.emit('post', req.body);
  });

});

};

我可以清楚地看到我将req.body传递给io.emit,但我无法弄清楚我需要放在哪里。我尝试了几件事,但都没有。

提前致谢。

西蒙

1 个答案:

答案 0 :(得分:0)

我可以确认我之前的评论和更改确实解决了我的错误。