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都重新初始化,您可能需要检查database
或myCollection
已经存在。