我有一个目录结构
./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
?
This question似乎很有用但是它使用的是mongodb npm模块而不是mongoose,问题不清楚,并且所有作者的评论都已被删除。
答案 0 :(得分:13)
您应该只在您的应用程序的启动代码中调用mongoose.connect
一次。这将为您的应用程序创建默认连接池。
您的model1.js
和model2.js
文件通过调用mongoose.model
来创建其模型,并将其绑定到默认连接。
所以它实际上是由Mongoose为你处理的。
答案 1 :(得分:8)
在./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;
然后使用这样的模型(例如In ./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...');
});