在node.js和mongoose中添加好友路由的正确方法?

时间:2015-09-01 11:33:44

标签: node.js express mongoose socket.io

我打算创建一条路线,用户可以将其他用户添加为他/她的朋友,这样他们可以在他们成为朋友后互相聊天。

所以基本上一旦用户A向用户B发送了请求,用户B将通过socket.io

获得有关请求的实时通知

现在的问题是,我无法想出如何实现上述方案的自己的解决方案,据我所知,我应该创建两条路线GETPOST < / p>

我正在使用mongoose进行数据库查询,插入,更新和删除

这是我的代码

// GET route for getting the user's information -- Simple route

router.get('/users/:facebook_name', function(req, res) {
  User.findOne(facebook_name, function(err, user) {
    if (!user) {
      res.json({message: "Couldn't find a user by that name"});
      return;
    } 
    res.json(user);
  });
});

// POST route for adding a friend 
router.post('/friendships/create/:facebook_name', ensureAuthenticated, function(req, res) {
  // What should i put in this route to make the adding a friend feature works?
  User.findOneAndUpdate(facebook_name, function(err, user) {  
    if (user) {
      res.json({message: "You already send a friend request to that person"});
      return;
    } 
    // Send a live notification to the other user
    socket.emit('sending request', {message: "added you as a friend"});
  }); 
});

用户架构代码 - 不确定这个

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var UserSchema = new Schema({

  friends: [{ type: Schema.Types.ObjectId, ref: 'User'}],
  facebook: {
    id: String,
    token: String,
    // email: String,
    displayName: String,
    photo: String
  }
});

// Should I even create this schema?
var FriendsRequest = new Schema({

  madeBy: [{ type: Schema.Types.ObjectId, ref: 'User'}],


})

module.exports = mongoose.model('User', UserSchema);
module.exports = mongoose.model('FriendsRequest', FriendsRequest);

我对你们并不完全诚实,在POST路线中,我对如何编写逻辑没有什么好主意,因为我现在真的很困惑,用户B怎么会得到实时请求通知?我应该为此创建另一条路线吗?

在构建稍微复杂的应用程序时,这是我的问题,即使它看起来很简单,我也无法想出如何做某个功能的良好逻辑。我已经被困在这个问题上将近4个小时,浏览和阅读网络,但我相信这是我唯一能找到如何做某事的线索的地方。

谢谢。

1 个答案:

答案 0 :(得分:4)

您可以为每个facebookName创建套接字(如果唯一)。

在客户端:

socket.on('connection', function (data) {
   socket.emit('setFacebookName', facebookName); });
}

服务器使用facebookName保存每个套接字:

socket.on('setFacebookName', function (facebookName) {
    users[facebookName]=socket;
});

现在,当用户在此请求中向该用户发送聊天请求时

// POST route for adding a friend 
router.post('/friendships/create/:facebook_name', ensureAuthenticated, function(req, res) {
  // What should i put in this route to make the adding a friend feature works?
  User.findOneAndUpdate(facebook_name, function(err, user) {  
    if (user) {
      res.json({message: "You already send a friend request to that person"});
      return;
    } 
    // Send a live notification to the other user
    sendLiveNotification(facebook_name);
  }); 
});

function sendLiveNotification(facebookName){
   socket.on('send notification', function (facebookName) {
     users[facebookName].emit('sending request', "has sent friend request");
   });
}