meteor在运行时更改数据库

我有三个数据库即, main_db它是默认的加载数据库。 我想login后加载数据库。 数据库是: –

main_db

– > user_collection

psm_2017_db

– > abc_collection

– > xyz_collection

psm_2018_db

– > abc_collection

– > xyz_collection

这是我的项目结构

在这里输入图像说明

这是我的login脚本。

client |->login |->login.js Template.login.rendered = function(){ SessionStore.set("login_user",false); }; Template.login.events({ 'submit #formLogin': function (event, target){ event.preventDefault(); var email = target.find('#loginEmail').value; var password = target.find('#loginPassword').value; // console.log(email +" "+password); Meteor.loginWithPassword(email, password, function(err){ if(err){ console.log(err); alert("Invalid Login!"); } else { SessionStore.set("login_user",true); console.log('successfully') Router.go("/dashboard") } }); } }); Template.layout.helpers({ "isLoggedin": function () { return SessionStore.get("login_user"); } }); 

这里是我的负载收集文件

 lib |->collection.js abcCollection=new Mongo.Collection("abc_collection"); xyzCollection=new Mongo.Collection("xyz_collection"); 

您可以使用下面的方法连接到多个数据库。

 var database = new MongoInternals.RemoteCollectionDriver("<<mongo url>>"); MyCollection = new Mongo.Collection("collection_name", { _driver: database }); 

<<mongo_url>>是您的标准mongodburl。 例如。 mongodb://127.0.0.1:27017/database_name

现在,在你的具体情况下, main_db包含用户集合(我假设这是关于meteor用户集合)。 你需要随时加载。 你不能在login后加载它,因为login所需的用户信息驻留在那个数据库中!

一旦你注意到上面的情况,连接到剩下的两个dbs可以login完成,如下所示:

/lib/dbconnection.js (这对于服务器和/lib/dbconnection.js都是通用的)

 Meteor.methods({ loadDB: function(){ if(Meteor.userId()){ // if a user has logged in var database = new MongoInternals.RemoteCollectionDriver("<<mongo url>>"); MyCollection = new Mongo.Collection("collection_name", { _driver: database }); } } }) Meteor.call("loadDB"); 

每次用户login时, loadDB都会被调用。但是我担心每次用户login时都会运行loadDB 。为了避免每个用户login都重新初始化,您可能需要检查databasemyCollection已经存在。