Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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 跨多个模型导出并重用我的mongoose连接_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 跨多个模型导出并重用我的mongoose连接

Node.js 跨多个模型导出并重用我的mongoose连接,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个目录结构 ./lib ./lib/model1.js ./lib/model2.js 两个模型都使用mongoose连接到同一个MongoDB实例,但定义了不同的模型: // model1.js var mongoose = require ('mongoose'); mongoose.connect ('bla') var db = mongoose.connection; var schema1, model1; db.on('error', console.error.bin

我有一个目录结构

./lib
./lib/model1.js
./lib/model2.js
两个模型都使用mongoose连接到同一个MongoDB实例,但定义了不同的模型:

// model1.js
var mongoose = require ('mongoose');
mongoose.connect ('bla')
var db = mongoose.connection;

var schema1, model1;

db.on('error', console.error.bind(console, 'database, why you no connect?'));

db.once('open', function callback () {

  schema1 = mongoose.Schema({
    // some properties
  });

  model1 = mongoose.model1 ('model1', schema1);

});
创建一次数据库连接并对每个模型重用它的最佳方法是什么?最好的目录结构是什么?可能是
/lib/middleware/db.js


似乎相关,但它使用的是mongodb npm模块而不是mongoose,问题不清楚,作者的所有评论都已删除。

您应该只在应用程序的启动代码中调用
mongoose.connect
一次。这将为您的应用程序创建默认连接池

您的
model1.js
model2.js
文件通过调用将它们绑定到默认连接的
mongoose.model
来创建它们的模型

所以它实际上是由猫鼬为您处理的。

在./app.js中:

var mongoose = require('mongoose');
mongoose.connect('connStr'); //connect once
在./lib/model1.js中:

var mongoose = require('mongoose');
var model1 = mongoose.model('model1', {
  foo1: { type: String, required: false},
  bar1: { type: String, required: false}
});
module.exports = model1;
在./lib/model2.js中:

var mongoose = require('mongoose');
var model2 = mongoose.model('model2', {
  foo2: { type: String, required: false},
  bar2: { type: String, required: false}
});
module.exports = model2;
然后像这样使用这些模型(例如在./routes.js中):


如果我有多个连接怎么办?猫鼬不起作用anymore@badrslaoui请参考这篇关于旧线程的评论,但这似乎不再有效。现在知道怎么做了吗?所以@johnyhk,我只是想验证一下。你是说,人们不必在连接到dbs的任何地方导出mongoose对象,因为只要使用require('mongoose')语句,他们在整个代码中都有相同的对象?
var model1 = require('./lib/model1.js');
var m1 = new model1({
   foo: 'value_for_foo',
   bar: 'value_for_bar'
});

m1.save(function (err) {
    if (err) {console.log(err.stack);}    
    console.log('saving done...');
});