Node.js 如何从节点中的所有模型访问mongodb
我第一次从头开始构建我的节点项目,我想知道如何从所有模型文件中访问db对象 我的项目结构如下:Node.js 如何从节点中的所有模型访问mongodb,node.js,mongodb,model-view-controller,model,Node.js,Mongodb,Model View Controller,Model,我第一次从头开始构建我的节点项目,我想知道如何从所有模型文件中访问db对象 我的项目结构如下: project/ |-> controllers/ | |-> auth.js | |-> lib/ |-> models/ | |-> token.js | |-> user.js | |-> views/ |-> app.js 现在,当用户向服务器发出请求并且db对象是storage on
project/
|-> controllers/
| |-> auth.js
|
|-> lib/
|-> models/
| |-> token.js
| |-> user.js
|
|-> views/
|-> app.js
现在,当用户向服务器发出请求并且db对象是storage on req以便可以从控制器访问时,在app.js上启动mongo连接
// Set db on req
app.use(function(req, res, next) {
req.db = mongoskin.db( /* connect string */ );
next();
});
现在的问题是:当我在控制器上时,我可以使用req.bd对象进行查询。但是我只想在我的模型上使用db,所以每次需要模型时我都必须传递这个对象
我有更好的解决方案吗?模型必须连接到数据库吗?还是我完全错了
谢谢你的帮助
附加问题:db连接的最佳方式是什么
- 在服务器启动时创建一个并一直保持它
- 实际:当用户发出请求并仅在该请求中使用时创建一个
module.exports = mongoskin.db( /* connect string */ );
现在,您可以在任何需要的地方使用它
var db = require('../lib/mongodb');
myModel.myMethod = function () {
db.doSomething();
};
如果我在我的控制器上调用多个模型,这不是问题吗?因此,如果我调用5个模型,我将进行5个连接?。不,此示例仅在应用程序范围内使用一个连接。您可以使用相同的技术并使用它实现连接池。模块导出不是每次您需要lib时都可以实现的吗?(我是node的新手)不,代码只是第一次执行。您需要的后续时间将只返回导出的内容。模块代码在加载时运行一次:编辑:Kevin B所说的:)这可能会回答您的额外问题: