Meteor - 映射到子域的集合的数据库

时间:2014-08-22 01:44:18

标签: mongodb meteor

我是meteor的新手,但想将我的流星网站上的不同网址映射到mongo集合。

company1.mysite.com - 会读取/写入mongodb company1 company2.mysite.com - 会读/写mongodb company2

流星有没有办法做到这一点?我希望将这两个子域映射到mysite.com,并让一个应用程序服务多个子域。

1 个答案:

答案 0 :(得分:0)

您可以在此处找到基本的概念证明: https://github.com/parhelium/meteor-so-db-collection-mapped-to-subdomain

需要2个包裹:

  • mrt add iron-router
  • mrt add inject-initial

服务器端

创建了两个示例集合:

Company1 = new Meteor.Collection("company1");
Company2 = new Meteor.Collection("company2");

并填写了一些数据。

另一个重要的步骤是创建hashMap(应该是现实生活中的集合),它将子域映射到 collectionName 。示例:

var subdomainToCollectionName = {
    "localhost":"company2",
    "company1.localhost":"company1",
    "company2.localhost":"company2"
} 

后来使用了Router

Router.map(function () {
    this.route('matchSubdomains', {
        where: 'server',
        path: '*',
        action: function () {
            // filter requests to static files, like favicon.ico
            if(/(css|js|html|map|ico)/.test(this.path)) {
                console.log("Router.onAllRoutes: INVALID :   "+this.path)
                return;
            }
            console.log("Router.onAllRoutes: VALID :   "+this.path)

            // read subdomain from headers 
            var subdomain = this.request.headers.host.split(":")[0];

            var collectionName = subdomainToCollectionName[subdomain];
            if(collectionName){

                // injects to HTML name of the collection which should be used
                Inject.obj('collection', {name:collectionName} );

            }else{
                throw new Error("Cannot find collection for subdomain : " + subdomain);
            }

            this.next();
        }
    });
   });

创建了一条路线,捕获所有可能的路线并过滤它们。当用户打开应用程序时,该路由仅执行一次,之后使用客户端路由器。

客户端

在客户端,只有一个集合Company

Company = new Meteor.Collection(Injected.obj('collection').name);

该集合动态附加到从子域映射到服务器端的集合。

希望有所帮助。