Express.js和Mongoose模型的关系 – 在模型或路由器?

在节点上使用Express.js和Mongoose构buildREST API – 我在模型或路由器上偶然发现了一个代码devise问题 – 我应该在哪里处理关系?

首先,我对MVC是很新颖的,即使express.js不是一个完整的MVC,我也想遵循最佳的devise实践。

这个问题是相当简单的 – 应用程序有用户,每个用户可以有多个文件(项目,订单等)。 显然,我必须至less存储每个创build的文档的用户ID。 问题是 – 我应该在哪里做?

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

实际上,更有趣的情况是,用户可以拥有多个组织,而且我必须为用户在与特定组织一起操作时创build的每个文档设置组织标识。

所以问题是:我应该在我的路由器中处理这种逻辑(express没有这样的“controller”)还是model?

在模型中做。 即使不创build强制关系,存储相关对象的实际ID仍将更改模型,因此没有理由将逻辑放在路由器中。

MongoDB(和Mongoose)不像关系数据库那样具有参照完整性。 这意味着,如果向不存在的对象插入关系,数据库不会给你一个错误。 它让应用程序代码处理这些关系。

mongoose试图将结构带入一个非常自由的nosql数据库。 因此,它提供了使用ObjectId模式types创build这种关系的能力。

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