マルチテナントアプリケーションで作業していますが、条件付きでルートをロードする方法が不明です。Iron Router - テナントに応じた条件付きルート
私が持っていた:
だから、var tenant = resolveTenant();
if (tenant === null) {
Router.configure({
layoutTemplate: 'main',
notFoundTemplate: 'not-found'
})
Router.route('home', {
path: '/'
})
Router.route('newClient', {
path: 'signup'
})
} else {
Router.configure({
layoutTemplate: 'storeMain',
notFoundTemplate: 'not-found'
})
Router.route('storeHome', {
path: '/'
})
}
テナントがメインのサイトをロードし、解決できなかった場合。
これはうまくいきました。しかし、問題はテナントが存在しない場合です。
ケース:
- http://localhost/ - メイン
- http://store1.localhost/をロード - ロードストア
- http://notastore.localhost/ - notTenantテンプレートをロードします。
これを行うには、データベースを呼び出す必要があります。だから私は、コールバックを持つメソッド呼び出しの内部条件を包ん:
Router.configure({
layoutTemplate: "loading"
});
var tenant = resolveTenant();
Meteor.call("tenant.exists", tenant, function(err, exists) {
if (tenant !== null && !exists) {
Router.configure({
layoutTemplate: 'noTenant'
})
Router.route('noTenant', {
path: '/'
})
} else if (tenant === null) {
Router.configure({
layoutTemplate: 'main',
notFoundTemplate: 'not-found'
})
Router.route('home', {
path: '/'
})
Router.route('newClient', {
path: 'signup'
})
} else {
Router.configure({
layoutTemplate: 'storeMain',
notFoundTemplate: 'not-found'
})
Router.route('storeHome', {
path: '/'
})
}
})
問題があり、通話が終了した後に、それはロードテンプレートの設定から移動しませんです。ロードテンプレートのルートを削除すると、Iron Routerのランディングページが表示されます。これを実現する方法について
"tenant.exists": function(url){
if(url === null){
return false
}
return Tenants.find({"url": url}).count() > 0;
},
任意のアイデア:
は、完了のために、ここでは "tenant.exists" 方法とは?
編集
私は、メソッド呼び出しから条件を削除すると、クライアント側でクエリを実行しようとしました。ただし、カウントしない場合は常に0が返されます。
if (tenant !== null && Tenants.find({"url": tenant}).count() === 0) {
Router.configure({
layoutTemplate: 'noTenant'
})
Router.route('noTenant', {
path: '/'
})
} else if (tenant === null) {
Router.configure({
layoutTemplate: 'main',
notFoundTemplate: 'not-found'
})
Router.route('home', {
path: '/'
})
Router.route('newClient', {
path: 'signup'
})
} else {
Router.configure({
layoutTemplate: 'storeMain',
notFoundTemplate: 'not-found'
})
Router.route('storeHome', {
path: '/'
})
}
私は、メソッド呼び出しに何らかの問題があるかもしれないという印象を持っています。デバッグして、メソッド呼び出しが期待通りに応答しているかどうかを確認できましたか? –
はいすべてが期待どおりで、存在する場合はtrueを返し、存在しない場合はfalseを返します。私はメソッド呼び出しから条件を削除しようとしましたが、 'Tenants.find({" url ":テナント})count()=== 0'を実行しましたが、 )、それはなぜでしょうか?私はあまりにも長い間流星をやっていない。 –
クライアント側でクエリを実行している場合は、Tenantsコレクション全体が公開されていますか?ブラウザコンソールでコレクションのクエリを実行し、そこに公開されているものを確認してください:Tenants.find()。fetch(); –