Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从节点中的所有模型访问mongodb_Node.js_Mongodb_Model View Controller_Model - Fatal编程技术网

Node.js 如何从节点中的所有模型访问mongodb

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

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

我的项目结构如下:

 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连接的最佳方式是什么

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

您可以将其分配给应用程序,但我会用它制作一个模块

mongodb.js

module.exports = mongoskin.db( /* connect string */ );
现在,您可以在任何需要的地方使用它

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

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

如果我在我的控制器上调用多个模型,这不是问题吗?因此,如果我调用5个模型,我将进行5个连接?。不,此示例仅在应用程序范围内使用一个连接。您可以使用相同的技术并使用它实现连接池。模块导出不是每次您需要lib时都可以实现的吗?(我是node的新手)不,代码只是第一次执行。您需要的后续时间将只返回导出的内容。模块代码在加载时运行一次:编辑:Kevin B所说的:)这可能会回答您的额外问题: