跨多个模型导出和重用我的猫鼬连接
Posted
技术标签:
【中文标题】跨多个模型导出和重用我的猫鼬连接【英文标题】:Export and reuse my mongoose connection across multiple models 【发布时间】:2014-06-11 04:08:58 【问题描述】:我有一个目录结构
./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,问题不清楚,作者的所有cmet都被删除了。
【问题讨论】:
【参考方案1】:您应该只在应用程序的启动代码中调用一次mongoose.connect
。这将为您的应用程序创建默认连接池。
您的model1.js
和model2.js
文件通过调用mongoose.model
创建它们的模型,这将它们绑定到默认连接。
所以它实际上是由 Mongoose 为你处理的。
【讨论】:
所以@JohnnyHK,我只是想验证一些东西。你是说人们真的不需要导出 mongoose 对象,无论它在哪里连接到他们的数据库,因为他们在整个代码中总是有相同的对象,只需使用 require('mongoose') 语句?【参考方案2】:在 ./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...');
);
【讨论】:
如果我有多个连接怎么办?猫鼬不再工作了 @badrslaoui 请参考这个 SO answear:***.com/a/19475259/2013487 评论旧线程,但这似乎不再起作用。知道现在该怎么做吗?以上是关于跨多个模型导出和重用我的猫鼬连接的主要内容,如果未能解决你的问题,请参考以下文章