Socket.io:将新消息添加到MongoDB数据库时更新聊天室

时间:2013-11-01 15:49:47

标签: node.js mongodb websocket socket.io

我正在创建一个实时聊天室。但是,与许多其他可用示例不同,只有经过身份验证的用户才能访问单个聊天室,并使用基于邀请的身份验证与其共享会议室。

以下是步骤:

1)在邀请时添加用户:

app.post('/shared', function(req, res){
Room.findOne({_id: req.body._id}. function(err,room){
  new_shared = new Shared({room_id: req.body._id, user_id, req.body.user_id});
  new_shared.save();
  room.shared.push(new_shared);
  room.save();
  res.send(new_shared);
});
});

2)一旦添加到Shared,用户就可以实时地将消息添加到房间中经过身份验证的用户。我们怎样才能做到这一点?

我正在尝试这个: app.post('/ message',function(req,res,next){  //在Mongodb中保存消息

// 发出套接字函数 - 我们如何在API中初始化它?

}

3)在客户端,我使用的是Backbone JS。因此,一旦添加了新消息,我应该在主干上调用.fetch()方法来检索所有消息。

我对Socket.IO来说比较新,所以其中一些可能听起来很愚蠢。

1 个答案:

答案 0 :(得分:1)

从我的角度来看,mongodbexpress在您的聊天应用中并没有很大的用途,socket.io会带来所有负担。

首先你应该考虑重建整个方法,你应该尝试以下方法,以获得干净的结果。

  • 使用简单的单一路由登录/login等用户,以便您可以使用mongodb对用户进行身份验证

  • 建立与后端socket.io的连接,尝试提供处理连接的脚本

  • 由于您使用的是Backbone,请尝试使用sync覆盖,使用socket.io代替http请求Backbone.iobind

  • 现在终于连接到您的expressjs服务器的socket.io服务器应该处理其余的

    1. 它应该使用expressjs会话进行身份验证
    2. 它应该处理连接和消息
    3. 内置.room socket.io功能,因此没有理由使用mongoDB和expressjs。

总结一下,如果在数据库中存储使用凭证,则可以跳过expressjs并使用socket.io,http服务器和mongodb