我正在尝试让用户向其他用户发送好友请求,类似于 Facebook 和其他社交媒体平台。我已经开始创建这个功能,但很快就陷入了困境,因为我对 mongoDB 和整个 Schema 还很陌生。
以下是我目前拥有的型号:
// User Schema
var UserSchema = new Schema({
_id: {
type: Number
},
name: {
type: String
},
username: {
type: String,
index: true
},
password: {
type: String,
required: true
},
email: {
type: String
},
friends: [{
friendName: {
type: Schema.ObjectId,
required: true,
ref: 'User'
},
duration: {
type: Number
}
}]
});
// Friendship Schema
var FriendshipSchema = new Schema({
participants: [{
type: Schema.Types.ObjectId,
ref: 'User'
}],
requestTo: {
type: Schema.Types.ObjectId,
ref: 'User'
},
accepted: {
type: Boolean,
default: false
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
var Friendship = module.exports = mongoose.model('Friendship', FriendshipSchema);
var User = module.exports = mongoose.model('User', UserSchema);
这是我目前所知的。从这里开始,我不知道如何使用这些模式在两个用户之间建立友谊。我的最终目标是在网页上有一个按钮,将好友请求发送给预期的收件人,然后他们可以接受或拒绝该请求。
对此的任何帮助都会很棒,因为我不知道如何处理这两个模式。谢谢!
最佳答案
我们只需要采用一个模式,即 userSchema(正如 Israel 上面所说,您只需要一个数组/对象来在 userSchema 上列出您的友谊)。但我们需要添加另一个模式(据说是friendRequestSchema)。
FriendRequest 架构将是: - ID 用户请求(int) - ID 用户收件人 (int) - status (int)//假设 1= 请求,2=接受,3=拒绝
Controller 应该来自用户 A 点击用户 B 页面上的“好友请求”按钮。
- 好友请求按钮将调用一个函数,让它说“sendFriendRequest()”
如果函数运行,则会记录在friendRequest DB上,即会记录用户A(作为请求者)的ID、用户B的ID和请求状态。
如果请求状态 = 1,则用户 B 将收到通知并给他两个选项:接受和拒绝。
- 用户 B 接受或拒绝
如果用户按下接受按钮,则friendRequest DB中的状态更新为=> 2(已接受)。然后,您必须调用另一个函数将用户 ID A 添加到用户 B 的好友列表中。反之亦然。然后,如果您想发出通知,也可以调用它。
否则用户 B 将按拒绝(状态将为 => 3)然后通知它。
用户架构
var UserSchema = new Schema({
name: String,
username: {
type: String,
index: true
},
password: {
type: String,
required: true
},
email: String,
friendship: [String] });
然后是 FriendRequestschema
var FriendRequestSchema = new Schema({
requester: {
type: int,
required: true
},
recipient: {
type: int,
required: true
},
status:
type: int,
required: true });
这只是为了让您知道它是如何工作的。关于(sendrequest、block .etc)的更复杂的方法,您可以 check this link ,这是PHP的流程,但是你可以轻松地将它移动到你的js中。希望对你有帮助。
关于node.js - 使用 Express 和 MongoDB 的好友请求系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43508901/