Mongoose和NodeJS中的多个数据库使用相同的引用文件架构

时间:2016-01-05 16:41:03

标签: node.js mongodb mongoose

我正在构建一个我想要基于GET查询使用两个数据库的Web应用程序。这两个数据库具有相同的模式,唯一的区别是一个具有实时数据,另一个是擦除(或测试)数据。

这很好用,但我想知道这是否是解决这个问题的正确方法。

我引用了一个带有模式的模型:names_model.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var namesSchema = new Schema({
name: String,
createdAt: String
});

module.exports = mongoose.model('names', namesSchema);

这是我的主要档案。如果param查询为1,它将连接到第一个db,否则它将连接到第二个db。

var mongoose = require('mongoose');

var db = mongoose.createConnection('mongodb://localhost/database1');
var db2 = db.useDb('database2');
var NamesDB = require('./names_model.js');

var Connect = db.model('names', NamesDB);
var Connect2 = db2.model('names', NamesDB);

exports.getData = function(dbName, sendBack) {

    console.log(dbName);
    if (dbName == 1) {
        var Names = Connect;
    }
    else {
        Names = Connect2;
    }

    Names.find({}, function (err, docs) {
        if (err) {
            console.log(err)
        }
        else {
            sendBack(docs);
        }
    });
};

就像我上面提到的,这确实有效,但我觉得我可能会为自己做出额外的步骤,但我不太确定。我希望有人能告诉我这是否更简单。

谢谢! Ť

1 个答案:

答案 0 :(得分:0)

您可以使用环境变量来定义您是在“实时/制作”网站还是开发网站上。

在系统中定义一个env变量,通常是NODE_ENV=<env-name>,然后使用process.env.NODE_ENV上的条件来定义每个env使用的内容:

var dbName;

if (process.env.NODE_ENV === 'development') {
    // Define the development db
    dbName = 'database1';
 } else if (process.env.NODE_ENV === 'production') {
    // Define the production db
    dbName = 'database2';
 }

 var db = mongoose.createConnection('mongodb://localhost/' + dbName);
 var NamesDB = require('./names_model.js');

 var Connect = db.model('names', NamesDB);