sin*_*Gob 13 mongoose node.js express socket.io
我打算创建一条路线,用户可以将其他用户添加为他/她的朋友,这样他们一旦成为朋友就可以互相聊天.
因此,基本上一旦用户A向用户B发送了请求,用户B将通过以下方式获得有关请求的实时通知 socket.io
现在的问题是,我无法想出如何实现上述方案的自己的解决方案,据我所知,我应该创建两条路线GET,POST
我正在使用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"});
});
});
Run Code Online (Sandbox Code Playgroud)
用户架构代码 - 也不确定这个
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);
Run Code Online (Sandbox Code Playgroud)
我对你们并不完全诚实,在这POST条路线上,我对如何编写逻辑没有什么好主意,因为我现在真的很困惑,用户B将如何得到实时请求通知?我应该为此创建另一条路线吗?
在构建稍微复杂的应用程序时,这是我的问题,即使它看起来很简单,我也无法想出如何做某个功能的良好逻辑.我已经被困在这个问题中近4个小时,浏览和阅读网络,但我相信这是我唯一能找到如何做某事的线索的地方.
谢谢.
小智 4
您可以做的是为每个 facebookName 创建套接字(如果唯一)。
在客户端:
socket.on('connection', function (data) {
socket.emit('setFacebookName', facebookName); });
}
Run Code Online (Sandbox Code Playgroud)
服务器用 facebookName 保存每个套接字:
socket.on('setFacebookName', function (facebookName) {
users[facebookName]=socket;
});
Run Code Online (Sandbox Code Playgroud)
现在,当用户在此请求中向该用户发送聊天请求时
// 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");
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1407 次 |
| 最近记录: |