我正在构建一个我想要基于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);
}
});
};
就像我上面提到的,这确实有效,但我觉得我可能会为自己做出额外的步骤,但我不太确定。我希望有人能告诉我这是否更简单。
谢谢! Ť
答案 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);