Iron-router 基础路由和用户路由
Iron-router base route and users routes
目前我正在使用 Meteor.js 构建社交网络,但遇到了路由问题。这就是所需的路由器行为:
- 在“/”上,如果用户未登录,则重定向到需要登录的语言页面。
- 在“/”上,如果用户已登录,则获取他的用户名并通过“/:用户名”重定向到个人资料页面
- 在“/:username”上,通过传递的用户名获取用户并呈现他的个人资料
这就是我的解决方案:
Router.map ->
@route 'base',
path: '/'
waitOn: ->
waitOnUser()
action: ->
say 'base route'
user = Meteor.user()
if user?
say 'redirecting to username from base route'
username = user.profile.username
@redirect '/user/' + username
else
@redirect 'hello'
@route 'profile', {
path: 'user/:username'
layoutTemplate: 'mainLayout'
template: 'profileLayout'
waitOn: ->
[
waitOnUser(),
Meteor.subscribe('pageOwner', @params.username)
]
onBeforeAction: ->
Session.set('profileOwner', Meteor.users.findOne({'profile.username': @params.username}))
@next()
data: ->
if @ready()
user = Meteor.users.findOne({'profile.username': @params.username})
profile = user.profile
id = user._id
owner = Meteor.user().profile.username is profile.username
{
profile: profile
userId: id
owner: owner
}
action: ->
@render()
waitOnUser = ->
user = Meteor.user()
handle =
ready: ->
if user?
true
else
false
问题是每次调用“/:用户名”并重定向到已登录用户的主页时,基本路由都会起作用,因此无法观看其他用户的页面。
你能为我的案例提出一些更好的解决方案吗?
找到解决方案,只需要更改路由定义的顺序,以便 'profile' 路由在 'base'
之前被调用
目前我正在使用 Meteor.js 构建社交网络,但遇到了路由问题。这就是所需的路由器行为:
- 在“/”上,如果用户未登录,则重定向到需要登录的语言页面。
- 在“/”上,如果用户已登录,则获取他的用户名并通过“/:用户名”重定向到个人资料页面
- 在“/:username”上,通过传递的用户名获取用户并呈现他的个人资料
这就是我的解决方案:
Router.map ->
@route 'base',
path: '/'
waitOn: ->
waitOnUser()
action: ->
say 'base route'
user = Meteor.user()
if user?
say 'redirecting to username from base route'
username = user.profile.username
@redirect '/user/' + username
else
@redirect 'hello'
@route 'profile', {
path: 'user/:username'
layoutTemplate: 'mainLayout'
template: 'profileLayout'
waitOn: ->
[
waitOnUser(),
Meteor.subscribe('pageOwner', @params.username)
]
onBeforeAction: ->
Session.set('profileOwner', Meteor.users.findOne({'profile.username': @params.username}))
@next()
data: ->
if @ready()
user = Meteor.users.findOne({'profile.username': @params.username})
profile = user.profile
id = user._id
owner = Meteor.user().profile.username is profile.username
{
profile: profile
userId: id
owner: owner
}
action: ->
@render()
waitOnUser = ->
user = Meteor.user()
handle =
ready: ->
if user?
true
else
false
问题是每次调用“/:用户名”并重定向到已登录用户的主页时,基本路由都会起作用,因此无法观看其他用户的页面。
你能为我的案例提出一些更好的解决方案吗?
找到解决方案,只需要更改路由定义的顺序,以便 'profile' 路由在 'base'
之前被调用