假设您使用kadira:flow-router,您可以定义trigger on enter。此函数在页面呈现之前运行并允许检查某些状态,例如如果用户已登录。这也允许获取当前用户的收件箱 ID。
为此,您需要一个流星方法。此方法还检查当前用户是否为已登录和注册用户(因为客户端中的Meteor.user() 始终可以被操作。如果它是有效的iser,则该方法检索用户的列表文档并返回它是_id .
Meteor.methods({
'getListByUser'() {
// check user permission
if (!this.userId || !Meteor.users.findOne(this.userId))
throw new Error("permission denied");
// get listId by userId
return Lists.findOne({userId:this.userId})._id;
}
});
注意:这只是一个示例,假设每个列表文档都通过一个名为userId 的字段与用户连接。在您的情况下,您需要以特定方式获取用户列表。
相应的路由然后调用triggersEnter服务器方法获取listId并将用户重定向到他/她的收件箱。
FlowRouter.route('/', {
// calls just before the action
triggersEnter: [function(){
Meteor.call("getListByUser", function(err, listId) {
if (err) { /* handle err */ }
if (listId) redirect('/lists/'+listId);
});
}],
action: function() {
// do something you like
},
});
这可能是使用触发器进入的一种解决方案。还有另一种设计,一旦您从根路径模板中的方法加载了listId,您就可以将lists 模板集成到您在/(根)路径中呈现的模板中。我不鼓励这样做,因为它会带走一些灵活性,您可以将两个模板相互硬链接。