我在Meteor中有一个用户个人资料。
我正在使用Flow Router。
我想检查用户是否存在于每条路线上。
我试过了
const userRedirect = ( context, redirect, stop ) => {
let userId = FlowRouter.getParam( 'userId' );
if ( Meteor.users.find( { _id: userId } ).count() === 0 ) {
FlowRouter.go( 'userList' );
}
};
const projectRoutes = FlowRouter.group( {
name: 'user',
triggersEnter: [ userRedirect ]
} );
userRoutes.route( '/users/:userId', {
name: 'userDetail',
action: function ( params, queryParams ) {
BlazeLayout.render( 'default', { yield: 'userDetail' } );
},
} );
但它不起作用。
我想这是因为我没有订阅用户集合。
我怎样才能在路线上这样做?我应该使用
const userRedirect = ( context, redirect, stop ) => {
let userId = FlowRouter.getParam( 'userId' );
// subscribe to user
Template.instance().subscribe( 'singleUser', userId );
// check if found
if ( Meteor.users.find( { _id: userId } ).count() === 0 ) {
FlowRouter.go( 'userList' );
}
};
我已尝试使用
检入模板Template.userDetail.onCreated( () => {
var userId = FlowRouter.getParam( 'userId' );
Template.instance().subscribe( 'singleUser', userId );
});
Template.userDetail.helpers( {
user: function () {
var userId = FlowRouter.getParam( 'userId' );
var user = userId ? Meteor.users.findOne( userId ) : null;
return user;
},
} );
但它只会使用变量user
填充模板,该变量是用户对象或null。
我想使用Flow Router为非现有路由提供的notFound配置。我想这也适用于'不存在的数据'。
因此,如果路径路径为/users/:userId
且具有特定userId的用户不存在,则路由器应将路由解释为无效路径。
答案 0 :(得分:1)
FlowRouter documentation on auth logic and permissions建议控制显示哪些内容未登录模板而不是路由器本身。铁路由器模式通常在路由器中进行身份验证。
针对您最近提出的问题中的具体问题:
<强> HTML:强>
{{#if currentUser}}
{{> yield}}
{{else}}
{{> notFoundTemplate}}
{{/if}}
要使用触发器重定向,请尝试以下行:
FlowRouter.route('/profile', {
triggersEnter: [function(context, redirect) {
if ( !Meteor.userId() ) redirect('/some-other-path');
}]
});
请注意,即使尚未加载Meteor.userId()
,Meteor.user()
仍然存在。