1

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

首先,我对 MVC 等很陌生,尽管 express.js 不是一个完整的 MVC,但我想遵循最佳设计实践。

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

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

实际上还有更有趣的情况,一个用户可以有多个组织,我必须为用户在与特定组织操作时创建的每个文档设置组织 ID。

所以问题是:我应该在我的路由器中处理这种逻辑(快递没有这样的“控制器”)还是模型?

4

1 回答 1

2

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

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

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

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

于 2012-12-07T14:09:58.643 回答