我使用標準鐵:鐵:路由器beforeAction登錄和數據:函數?
authenticatedController = RouteController.extend({
onBeforeAction: function(){
if (Meteor.user()){
var route = Router.current().route.getName();
this.next();
} else this.render('login');
})
這非常適用於unparameterized路線,例如:
Router.route("profile",{
name: "profile",
controller: 'authenticatedController'
});
當我確保用戶正在訪問的路線之前要驗證路由器模式嘗試這種模式延伸到參數化途徑,例如:
Router.route('/foo/:id',{
name: 'foo',
controller: 'authenticatedController',
data: function(){ return myCollection.findOne({ _id: this.params.id }); } }
});
- 它的工作原理,如果用戶在
- 已經登錄我得到的404頁面,如果用戶不登錄在
似乎beforeAction運行數據功能後。由於myCollection在用戶登錄之前不會發布任何文檔iron:路由器決定路由不存在。
我想要一個404的唯一時間是如果集合搜索沒有返回任何東西。
沒有你試穿Router.configure? 'notFoundTemplate:'notFound','和鉤子'Router.onBeforeAction('dataNotFound',{only:'profile'});' – Ethaan
感謝Ethann - 我有'notFoundTemplate:'notFound' - 這就是我的404如何顯示。我沒有嘗試'Router.onBeforeAction('dataNotFound',{only:'profile'});'因爲我實際上想要一個404如果id不存在(或者有人在切割/粘貼URL) –