使用帖子和评论构建一个简单的应用程序。
用户点击帖子并添加评论,每个查看同一帖子的人都会看到新评论添加到帖子中。全部通过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
};
第一次点击页面时,评论会提交一次(一个套接字连接),但是,如果我刷新页面并提交新评论,则会创建两个评论(每个连接的客户端一个)。
我出错的任何想法?
答案 0 :(得分:0)
确实 commentModel.findById
nede to be comment.findByID ?
答案 1 :(得分:0)
您可以尝试其中一些:
管理服务器上的套接字会话:socketio_session[user_id].push(session)
。
将允许您访问为特定用户连接的所有会话。在存储新会话之前,您可能不需要存储每个用户的会话列表,只需存储最新会话,并强制断开现有会话。
-
这列出了一些内容,包括更改强制新连接的配置
https://github.com/LearnBoost/socket.io/issues/474
-
这也可能有用,解释了如何使用express提取套接字中的会话ID:
http://www.danielbaulig.de/socket-ioexpress/
答案 2 :(得分:0)
我认为这可能会帮助您在每次用户刷新时创建新的套接字连接