Express.js和Mongoose模型关系 - 在模型还是路由器?

时间:2012-12-07 10:20:57

标签: node.js model-view-controller design-patterns express mongoose

在节点上使用Express.js和Mongoose构建REST API - 我在模型或路由器中偶然发现了代码设计问题 - 我应该在哪里处理关系?

首先,我是MVC的新手,即使express.js不是一个完整的MVC,我也想遵循最好的设计实践。

问题相当容易 - 应用程序有用户,每个用户可以有多个文档(项目,订单等)。显然,我必须至少为每个创建的文档存储用户ID。问题是 - 我应该在哪里做到这一点?

我可以从每个路由器的会话中获取用户ID并将其附加到文档,或者我可以将当​​前用户ID设置为全局变量,例如app.currentUserID,并在我的模型中使用它来附加文件的ID。

实际上有更多有趣的案例,用户可以拥有多个组织,我必须为用户在与特定组织合作时创建的每个文档设置组织ID。

所以问题是:我应该在我的路由器中处理这种逻辑(表示没有'控制器'这样)或模型吗?

1 个答案:

答案 0 :(得分:2)

在模型中执行此操作。即使您没有创建强制关系,存储相关对象的实际ID仍会更改模型,因此没有理由将逻辑留在路由器中。

MongoDB(和Mongoose)没有像关系数据库那样的引用完整性。这意味着如果向不存在的对象插入关系,数据库将不会给您错误。它允许应用程序代码处理这些关系。

Mongoose试图将结构带入一个非常自由的nosql数据库。因此,它提供了使用ObjectId模式类型创建此类关系的功能。

阅读以下SO答案以获取更多信息:https://stackoverflow.com/a/7813331/1801