运行时流星变化数据库

时间:2017-12-05 07:51:44

标签: javascript node.js meteor

我有三个数据库,即 main_db 它是默认的加载数据库。登录后我想要加载数据库。 数据库是: -

main_db

- > user_collection

psm_2017_db

- > abc_collection

- > xyz_collection

psm_2018_db

- > abc_collection

- > xyz_collection

这是我的项目结构

enter image description here

这是我的登录脚本。

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

1 个答案:

答案 0 :(得分:3)

您可以使用以下方法连接到多个dbs。

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

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

现在,在您的特定场景中,main_db包含用户集合(我假设这与流星用户集合有关)。你需要随时加载它。登录后您无法加载它,因为用户信息 - 登录所需的信息驻留在该数据库中!

完成上述操作后,可以在登录时连接剩余的两个dbs,如下所示:

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

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");
每次用户登录时都会调用

loadDB。但我担心每次任何用户登录时都会运行它。为了避免重新初始化它每个用户登录时,您可能需要检查databasemyCollection是否已存在。