node.js - Node Express 设计用于避免 Socket.io 中的多个客户端

标签 node.js express socket.io

使用帖子和评论构建一个简单的应用程序。

用户点击帖子并添加评论,查看同一帖子的每个人都会看到添加到帖子中的新评论。全部通过 Socket.io 完成。

这就是我实例化它的方式:

// app.js
var io = require('socket.io').listen(app.listen(app.get('port')));

var chat = io.of('/p/' + id).on('connection', function(socket) {
      socket.on('addComment', function(data) {
        var content = data.comment;
        var comment = new commentModel({
          user: req.user._id,
          post_id: id,
          content: content
        });
        comment.save(function(err, doc) {
          if (err) {
            return next(err);
          }
          commentModel.findById(doc._id).populate('user').exec(function(err, comment) {
            chat.emit('newComment', {
              comment: comment
            });
          });
        });
      });
    });

// client-side JS
self.socket_io = io.connect(window.location.href);
self.socket_io.on('newComment', function(data) {
    // do stuff with the new comment
};

第一次访问该页面时,评论会提交一次(一个套接字连接),但是,如果我刷新页面并提交新评论,则会创建两个评论(每个连接的客户端一个)。

有什么想法我哪里出错了吗?

最佳答案

确实 注释 Model.findById

需要 评论.findByID ?

关于node.js - Node Express 设计用于避免 Socket.io 中的多个客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21508777/

相关文章:

javascript - mongoDB 插入和处理.nextTick

node.js - Mongoose 中 'isUnique' 字段的用途

javascript - 如何在客户端实现 JSON Web token - Node.js

Android和Socket.io,发送和接收数据

javascript - Node JS Json Web token Router.use() 需要中间件函数,但未定义

node.js - 如何等待索引健康状况

node.js - 在node/mongodb/express 中创建登录系统。无法连接到数据库

javascript - 如何仅从数组中追加一次值

javascript - Socket.io socket.emit/socket.on 不工作

javascript - engine.io 与 socket.io 有何不同?