Iron-router 基础路由和用户路由

Iron-router base route and users routes

目前我正在使用 Meteor.js 构建社交网络,但遇到了路由问题。这就是所需的路由器行为:

  1. 在“/”上,如果用户未登录,则重定向到需要登录的语言页面。
  2. 在“/”上,如果用户已登录,则获取他的用户名并通过“/:用户名”重定向到个人资料页面
  3. 在“/: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'

之前被调用