2015-10-02 25 views
7

Hiện nay tôi có mã này cho kết nối của tôi mongoose.js:Mongoose nhiều kết nối

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; 

file mà đòi hỏi kết nối được test.js:

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


Làm cách nào để cập nhật mongoose.js để sử dụng nhiều đồng nnections với hàm mongoose.createConnection (...)?

tôi bắt đầu với những thay đổi chỉ cho một kết nối khi tôi làm những thay đổi như thế:

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

tôi nhận được "không xác định không phải là một chức năng". Nếu tôi sử dụng mã này:

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

tôi nhận được "Lỗi: Đang cố gắng để mở kết nối không khép kín"

Bất cứ lời khuyên?

Trả lời

10

Mongoose kết nối xử lý qua hồ bơi kết nối http://mongoosejs.com/docs/connections.html

Bạn có thể sử dụng server: {poolSize: 5} lựa chọn cho hồ bơi tăng/giảm (số lượng kết nối song song)

Nếu bạn cần kết nối đến cơ sở dữ liệu khác nhau nhìn đây Mongoose and multiple database in single node.js project

Ví dụ về nhiều kết nối:

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"); 
}); 
+0

Có, tôi cần nhiều kết nối DB. Tôi đã nhìn thấy câu trả lời này, nhưng nó vẫn không hoạt động trong trường hợp của tôi. Ví dụ với conn và conn2 có vẻ tốt nhất nhưng tôi không thể tách riêng nó thành hai tệp. Bạn có thể thử đưa ra một ví dụ không? – Pumych

+0

đã thêm ví dụ làm việc cho bạn. Đó là những gì bạn cần? – vmkcom

4

OK. Với ví dụ của bạn, tôi tìm thấy một giải pháp phù hợp với nhu cầu của tôi.

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); 

Điều duy nhất, là nó OK để thêm các đối tượng kết nối đến một loại chồn đối tượng hoặc có thể có một giải pháp thanh lịch hơn .

0

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 (lớp tùy chỉnh)

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; 

người dùng.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' 
}); 
0

Bạn có thể làm theo cách này

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

Bây giờ bạn có thể thêm mô hình cho từng trường hợp cầy mangut.

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

nhìn vào doc here

Các vấn đề liên quan