【问题标题】:Building an inbox system using Express/MongoDB使用 Express/MongoDB 构建收件箱系统
【发布时间】:2017-09-21 09:27:10
【问题描述】:

我一直在为我的个人项目开发一个出租公寓的应用程序。我一直想知道如何为当前使用 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) 对所有消息进行排序吗?我对架构设计有点迷茫。

【问题讨论】:

    标签: javascript node.js mongodb express ejs


    【解决方案1】:

    对于架构,您可能想要这样的东西:

    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);

    对于查询,你可以找到你需要的一切here

    【讨论】:

    • @Ozan,这能回答你的问题吗?
    • 在某种程度上确实如此。我担心使用这样的模式是否真的安全。
    • 为什么不安全?请记住,您无需公开架构中的任何内容。
    • 假设用户 x 正在查看消息并且路由是 app.get('messages/:messageId') 在将消息呈现到前面之前,我是否必须使用中间件来检查消息的所有权?否则任何有消息 ID 的人都可以阅读任何消息吗?
    • 是的,可以使用中间件,但是,我会在处理程序的第一行中检查 'messages/:messageId'。我们使用 Passport 进行用户管理,它将用户对象放到请求中。 passportjs.org
    猜你喜欢
    • 2015-09-10
    • 2019-03-30
    • 2013-07-13
    • 2016-06-15
    • 2019-07-06
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多