使用Express/MongoDB构建一个收件箱系统

4

我一直在开发一个租房应用作为我的个人项目。我一直在思考如何在当前使用mongodb作为数据库的应用中构建/实现收件箱系统。

这种功能有什么要注意的地方?是否可以定义一个名为“messages”的模式?

var MessageSchema = new mongoose.Schema({
  message: String,
  sender : {
        id : {
            type : mongoose.Schema.Types.ObjectId,
            ref: "User"
          },
         username: String
    }
  recipient : {
        id : {
            type : mongoose.Schema.Types.ObjectId,
            ref: "User"
          },
         username: String
    }
)};

如果我要向用户y发送一条消息,那么它将被存储为接收者,x值将是发送者。当我想呈现一个名为“收件箱”的页面时,我可以使用Messages.find({req.user._id})来排序所有的消息吗?在模式设计方面,我有点迷茫。
1个回答

2

对于架构,你可能需要像这样的东西:

const messageSchema = new mongoose.Schema({
  subject: String,
  body: String,
  seen: Boolean,
  sender: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "User"
  }
  recipient: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "User"
  }
})

const userSchema = new mongoose.Schema({
  username: String,
  email: Boolean,
  type: String
})

var Message = mongoose.model('Message', messageSchema);
var User = mongoose.model('User', userSchema);

关于查询,你可以在这里找到所需的一切。


@Ozan,这个回答解决了你的问题吗? - Dan Green-Leipciger
在某种程度上,它确实会。我担心使用这样的模式是否真的安全。 - Ozan
假设用户x正在查看一条消息,路由为app.get('messages/:messageId'),那么在将其呈现到前端之前,我是否需要一个中间件来检查消息的所有权?否则,任何人都可以通过消息ID阅读任何消息,对吗? - Ozan
是的,可以使用中间件,但是我会在 'messages/:messageId' 处理程序的第一行进行检查。我们使用 Passport 进行用户管理,它将用户对象放置在请求上。http://passportjs.org/ - Dan Green-Leipciger
让我们在聊天中继续这个讨论。链接 - Dan Green-Leipciger
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接