База данных Meteor для коллекций, отображаемых в субдомен

Я новичок в метеоризме, но хотел бы сопоставить различные URL-адреса на моем сайте метеоритов с коллекцией монго.

company1.mysite.com - будет читать/писать в mongodb company1 company2.mysite.com - будет читать/писать в mongodb company2

Есть ли способ с метеор? Я надеюсь сопоставить оба поддомена с mysite.com и иметь одно приложение, обслуживающее несколько поддоменов.

1 ответ

Основные доказательства концепции вы можете найти здесь: https://github.com/parhelium/meteor-so-db-collection-mapped-to-subdomain

Требуется 2 пакета:

  • mrt добавить железный маршрутизатор
  • mrt добавить инъекцию

Серверная сторона

Были созданы два примера коллекции:

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

Эта коллекция динамически привязана к коллекции, отображаемой на стороне сервера из субдомена.

Надеюсь, это поможет.

licensed under cc by-sa 3.0 with attribution.