使用 Express/MongoDB 构建收件箱系统
Posted
技术标签:
【中文标题】使用 Express/MongoDB 构建收件箱系统【英文标题】:Building an inbox system using 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) 对所有消息进行排序吗?我对架构设计有点迷茫。
【问题讨论】:
【参考方案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以上是关于使用 Express/MongoDB 构建收件箱系统的主要内容,如果未能解决你的问题,请参考以下文章
重点突破—— Nodejs+Express+MongoDB的使用基础
Node、Express、MongoDB:使用对象数组创建模式?
Node.JS、Express 和 MongoDB :: 多个集合