【问题标题】:How to access mongodb from all models in node如何从节点中的所有模型访问 mongodb
【发布时间】:2015-02-20 20:59:31
【问题描述】:

我是第一次从头开始构建我的节点项目,我想知道如何从所有模型文件中访问 db 对象?

我的项目结构是这样的:

 project/
  |-> controllers/
  |   |-> auth.js
  |
  |-> lib/
  |-> models/
  |   |-> token.js  
  |   |-> user.js
  |
  |-> views/
  |-> app.js

目前,mongo 连接在 app.js 上启动,当用户向服务器发出请求并且 db 对象存储在 req 上以便可以从控制器访问时,..

// Set db on req
app.use(function(req, res, next) {
  req.db = mongoskin.db( /* connect string */ );
  next();
});

现在的问题是: 当我在控制器上时,我可以使用 req.bd 对象进行查询。但我只想在我的模型上使用数据库,所以每次我需要模型时我都必须传递这个对象..

我有更好的解决方案吗?模型必须连接到数据库?还是我完全错了?

感谢您的帮助!


额外问题:什么是数据库连接的最佳选择?

  • 在服务器启动时创建一个并一直保持它?
  • 实际:当用户提出请求时创建一个并仅在此请求中使用它?

【问题讨论】:

标签: node.js mongodb model-view-controller model


【解决方案1】:

你可以把它分配给应用程序,不过,我会用它制作一个模块。

mongodb.js

module.exports = mongoskin.db( /* connect string */ );

现在您可以在任何需要它的地方使用它。

var db = require('../lib/mongodb');

myModel.myMethod = function () {
    db.doSomething();
};

【讨论】:

  • 在我的控制器上调用多个模型不是问题吗?因此,如果我调用 5 个模型,我将进行 5 个连接?..
  • 不,此示例仅在应用程序范围内使用单个连接。您也可以使用相同的技术并使用它实现连接池。
  • 每次需要 lib 时,模块导出都不是午餐? (我是节点新手)
  • 不,代码只是第一次执行。您需要的后续时间将简单地返回导出的内容。
  • 模块代码在加载时运行一次:nodejs.org/api/modules.html#modules_caching 编辑:Kevin B 所说的 :)
猜你喜欢
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 2020-09-28
  • 2019-09-23
  • 2021-09-05
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多