首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >猫鼬多重连接

猫鼬多重连接
EN

Stack Overflow用户
提问于 2015-10-02 11:44:21
回答 3查看 54.5K关注 0票数 31

目前,我有用于连接mongoose.js的代码。

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
var mongoose = require('../model/mongoose');
var schema = mongoose.Schema({...});

如何更新mongoose.js以使用mongoose.createConnection的多个连接(.)功能?

当我做这样的更改时,我只对一个连接进行更改:

代码语言:javascript
运行
复制
var mongoose = require('mongoose');
mongoose.createConnection('mongodb://localhost/db_name');
mongoose.open('localhost');
module.exports = mongoose;

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

代码语言:javascript
运行
复制
var mongoose = require('mongoose');
db = mongoose.createConnection('mongodb://localhost/db_name');
db.open('localhost');
module.exports = mongoose;

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

有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-02 14:05:55

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

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

如果您需要连接到不同的数据库,请在这里查看Mongoose and multiple database in single node.js project

多个连接的示例:

代码语言:javascript
运行
复制
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");
});
票数 40
EN

Stack Overflow用户

发布于 2015-10-03 13:48:09

好的。通过您的例子,我找到了一个适合我需要的解决方案。

mongoose.js

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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对象中,或者可能有更优雅的解决方案。

票数 11
EN

Stack Overflow用户

发布于 2017-03-03 03:53:31

config.js

代码语言:javascript
运行
复制
module.exports = {
    default: 'main',
    main: 'mongodb://localhost/main',
    admin: 'mongodb://localhost/admin',
};

connection.js

代码语言:javascript
运行
复制
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 (自定义类)

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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' 
});
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32906467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档