node.js - 使用 Express 和 MongoDB 的好友请求系统

标签 node.js mongodb express schema

我正在尝试让用户向其他用户发送好友请求,类似于 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 页面上的“好友请求”按钮。

  1. 好友请求按钮将调用一个函数,让它说“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/

    相关文章:

    python - 获取收集字节使用情况统计信息的pymongo方法?

    node.js - 如何使用 pm2 观看和重新加载 ExpressJS 应用程序

    node.js - 如何解析 Node 中的相对路径?

    javascript - 表单提交项目值正在重置

    sql - Sequelize 订单虚拟字段

    javascript - Mongoose 4.x "model.update()"回调已更改

    node.js - 如何使用 gcloud 凭据对 Dialogflow API 进行身份验证

    .net - 对从 MongoDB 获取的数据库列表进行排序

    node.js - https.createServer 错误 : SSL_CTX_use_certificate: ca md too weak

    javascript - 在node.js中读取文件是否保证项目的顺序