mongoose多重连接

目前我有这个代码为我的连接mongoose.js

var mongoose = require('mongoose'); var uriUtil = require('mongodb-uri'); var mongodbUri = 'mongodb://localhost/db_name'; var mongooseUri = uriUtil.formatMongoose(mongodbUri); mongoose.connect(mongooseUri); module.exports = mongoose; 

需要连接的文件是test.js

 var mongoose = require('../model/mongoose'); var schema = mongoose.Schema({...}); 


我怎样才能更新mongoose.js与mongoose.createConnection(…)函数使用多个连接?

当我做这样的更改时,我只从一个连接开始更改:

 var mongoose = require('mongoose'); mongoose.createConnection('mongodb://localhost/db_name'); mongoose.open('localhost'); module.exports = mongoose; 

我得到“未定义不是一个函数”。 如果我使用这个代码:

 var mongoose = require('mongoose'); db = mongoose.createConnection('mongodb://localhost/db_name'); db.open('localhost'); module.exports = mongoose; 

我得到“错误:试图打开未closures的连接”

有什么build议?

mongoose通过连接池处理连接http://mongoosejs.com/docs/connections.html

您可以使用server: {poolSize: 5}选项来增加/减less池(并行连接数)

如果你需要连接到不同的数据库看这里Mongoose和多个数据库在单个node.js项目

多个连接的示例:

 var mongoose = require('mongoose') var conn = mongoose.createConnection('mongodb://localhost/db1'); var conn2 = mongoose.createConnection('mongodb://localhost/db2'); var Schema = new mongoose.Schema({}) var model1 = conn.model('User', Schema); var model2 = conn2.model('Item', Schema); model1.find({}, function() { console.log("this will print out last"); }); model2.find({}, function() { console.log("this will print out first"); }); 

好。 用你的例子,我find了适合我需求的解决scheme。

mongoose.js

 var mongoose = require('mongoose'); mongoose.main_conn = mongoose.createConnection('mongodb://localhost/main'); mongoose.admin_conn = mongoose.createConnection('mongodb://localhost/admin'); module.exports = mongoose; 

content.js

 var mongoose = require('../model/mongoose'); var schema = mongoose.Schema({...}); /// functions here schema.statics.func_a(){...}; schema.statics.func_b(){...}; // And finaly updated only one line //exports.Content = mongoose.model('Content', schema); exports.Content = mongoose.main_conn.model('Content', schema); 

唯一的事情是,将连接对象添加到mongoose对象还是可以有更优雅的解决scheme。

config.js

 module.exports = { default: 'main', main: 'mongodb://localhost/main', admin: 'mongodb://localhost/admin', }; 

connection.js

 const mongoose = require('mongoose'); const config = require('./config'); mongoose.Promise = global.Promise; function createConnection(name) { return mongoose.createConnection(config[name]); } module.exports = createConnection(config[config.default]); module.exports.on = createConnection; 

model.js(自定义类)

 const connection = require('./connection'); class Model { constructor(name, data) { this.data = data; return this.connection().model(name, data.schema); } connection() { if (this.data.connection) { return connection.on(this.data.connection); } return connection; } } module.exports = Model; 

user.js的

 const Schema = require('mongoose').Schema; const conn = require('./connection'); const Model = require('./model'); const userSchema = new Schema({ name: String, email: String, password: String }); // USING MONGOOSE MODEL // default connection const UserM1 = conn.model('User', userSchema); // admin connection const UserM2 = conn.on('admin').model('User', userSchema); // USING CUSTOM MODEL // default connection const UserC1 = new Model('User', { schema: userSchema }); // admin connection const UserC2 = new Model('User', { schema: userSchema, connection: 'admin' }); 

你可以这样做

 var mongoose = require('mongoose'); var mongoose2 = new mongoose.Mongoose(); 

现在您可以将模型添加到每个mongoose实例。

 mongoose.model('some', mongooseSchema1); mongoose.model('some2', mongooseSchema2); 

看看这里的文档