我正在构建一个Web应用程序,我想将其与基于GET查询的两个数据库一起使用。这两个数据库具有相同的架构,唯一的区别是一个拥有实时数据,另一个拥有清理(或测试)数据。

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

我使用架构引用模型: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);


这是我的主文件。如果参数查询为1,它将连接到第一个数据库,否则它将连接到第二个数据库。

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


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

谢谢!
Ť

最佳答案

您可以使用环境变量来定义您是在“现场/生产”站点还是开发站点。

在系统中定义一个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);

关于node.js - Mongoose和NodeJS中使用相同引用文件模式的多个数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34616772/

10-12 15:58
查看更多