我是meteor的新手,但想将我的流星网站上的不同网址映射到mongo集合。
company1.mysite.com - 会读取/写入mongodb company1 company2.mysite.com - 会读/写mongodb company2
流星有没有办法做到这一点?我希望将这两个子域映射到mysite.com,并让一个应用程序服务多个子域。
答案 0 :(得分:0)
您可以在此处找到基本的概念证明: https://github.com/parhelium/meteor-so-db-collection-mapped-to-subdomain
需要2个包裹:
创建了两个示例集合:
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);
该集合动态附加到从子域映射到服务器端的集合。
希望有所帮助。