Coffeescript 除选项不在Router.onBeforeAction中工作外
我的Coffeescript 除选项不在Router.onBeforeAction中工作外,coffeescript,meteor,iron-router,Coffeescript,Meteor,Iron Router,我的routes.coffee文件中有以下代码,Router.onBeforeAction(…函数似乎忽略了except选项,并不断重定向到“登录”模板。这是为什么 enforceLogin = -> if Meteor.userId() is undefined or Meteor.userId() is null isLoggedIn = false Router.go '/sign-in' else isLoggedIn
routes.coffee
文件中有以下代码,Router.onBeforeAction(…
函数似乎忽略了except
选项,并不断重定向到“登录”模板。这是为什么
enforceLogin = ->
if Meteor.userId() is undefined or Meteor.userId() is null
isLoggedIn = false
Router.go '/sign-in'
else
isLoggedIn = true
return isLoggedIn
isCharacterNamed = ->
userCharacter = Characters.findOne ownedBy: Meteor.userId()
userCharacter.name is not undefined
checkCharacterNamed = (context) ->
if !isCharacterNamed()
Router.go 'create-character'
userCharactersSubscription = -> Meteor.subscribe 'userCharacters'
nonGameRoutes = ['sign-in', 'sign-up', 'sign-out', 'blog']
Router.map ->
@route 'home', path: '/'
@route 'adventures'
@route 'create-character', onBeforeAction: ->
enforceLogin()
if @ready()
if isCharacterNamed() then Router.go 'home'
@route 'blog'
@route 'admin/blog'
@route 'loading'
@route 'sign-in'
@route 'sign-up'
@route 'sign-out'
Router.onBeforeAction('loading')
Router.onBeforeAction enforceLogin, { except: nonGameRoutes }
Router.waitOn(userCharactersSubscription)
Router.onAfterAction ->
if @ready()
checkCharacterNamed()
@render()
else
@render('loading')
,
{ except: _.union(nonGameRoutes, ['create-character']) }
试试`Router.onBeforeAction enforceLogin,除了:nonGameRoutes我明天会这样做,但这不是编译到同一个javascript吗?嗯……这看起来很奇怪,像这样将js语法与coffescript混合在一起。但你可能是对的,这不是问题的原因。你是否为onBeforeAction定义了“loadingTemplate”(“装载”)要正确启动?可能这会导致重新加载页面。请尝试在enforceLogin中放置一些console.log以确保它正在启动。是的,这是正常的,大括号和括号是可选的。我确实定义了加载模板,但代码中似乎缺少该模板,我将对此进行检查。enforceLogin有效,因为我暂时通过将它放在每个适当的路由中修复了该问题。我并不是说它不起作用。我只是想知道该功能是否真的是重定向的原因。例如,它可能只是Meteor重新加载由不存在的路由引起的页面。你在控制台日志中看到了什么吗?这里有类似的问题。我通过自己处理该问题而后退在
enforceLogin
函数中。似乎except对我也不起作用。也许这是一个bug。