我正在构建一个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/