node.js - 在 node.js 和 Mongoose 中添加 friend 路线的正确方法?

标签 node.js express mongoose socket.io

我打算创建一条路径,用户可以在其中添加另一个用户作为他/她的 friend ,以便他们成为 friend 后可以互相聊天。

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

获得有关该请求的实时通知

现在的问题是,我无法想出自己的解决方案来实现上述场景,据我所知,我应该创建两个路由 GET发布

我正在使用 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 route ,我对如何编写逻辑一无所知,因为我现在真的很困惑,用户 B 如何会收到实时请求通知吗?我应该为此创建另一条路线吗?

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

谢谢。

最佳答案

您可以做的是为每个 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");
   });
}

关于node.js - 在 node.js 和 Mongoose 中添加 friend 路线的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32330550/

相关文章:

node.js - 使用请求模块传递自定义 header

javascript - node.js 语法错误 : Unexpected token { in Version v0. 10.43

json - 解析 Node 命令行参数

javascript - 无法读取未定义的属性 'fetch'

javascript - 如何从node.js中的模块导出函数

javascript - Node.js server.address().address 返回::

mongodb - Mongo 查询 Distinct with Sum 不起作用

node.js - 同步 Mongoose 请求

node.js - 在 Mongoose Schema 中返回 "parent"集合特定值

javascript - 如何在nodejs(tensorflow.js)中训练模型?