在多个模型中导出并重用我的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.bind(console, 'database, why you no connect?')); db.once('open', function callback () { schema1 = mongoose.Schema({ // some properties }); model1 = mongoose.model1 ('model1', schema1); }); 

创build数据库连接一次并将其用于每个模型的最佳方法是什么? 什么是最好的目录结构? 也许./lib/middleware/db.js

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

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

您的model1.jsmodel2.js文件通过调用model1.js创build模型, model1.js将它们绑定到默认连接。

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

在./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中):

 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...'); });