为什么不调用此服务器方法在Meteor中工作?

时间:2013-12-20 19:47:58

标签: javascript coffeescript meteor

我的Meteor项目的服务器/服务器目录中有一个名为authServices.coffee的文件。它具有以下函数定义,后跟Meteor.methods调用:

 isAuthorized = () ->
    # note that at this point there is ever to be but one authorized user
    authorized = Assets.getText('authorizedUsers').trim()
    this.userId.trim() is authorized

这不起作用 - 也就是说,调用Meteor.call 'getKey'会返回undefined

Meteor.methods(
    isAuthorized : isAuthorized
    getKey : () -> 
    if isAuthorized()
        Assets.getText('Key')
)

但如果我在上面isAuthorized中内联getKey,它会返回true(给定正确的输入)

我猜这是this对这些对象的行为的函数,但是无法完全掌握它。

2 个答案:

答案 0 :(得分:1)

函数isAuthorized和方法getKey具有不同的上下文。最简单的解决方案就是如此实现getKey

getKey: ->
  if Meteor.call 'isAuthorized'
    Assets.getText 'Key'

或者,您可以手动使用callapply来传递this,也可以将@userId作为参数传递给isAuthorized函数。

样式点:使用CS时,如果函数没有参数,则不需要空的parens。

答案 1 :(得分:0)

这会是一个选择吗?

isAuthorized = (userId) ->
    # note that at this point there is ever to be but one authorized user
    authorized = Assets.getText('authorizedUsers').trim()
    userId.trim() is authorized

Meteor.methods(
    isAuthorized : () -> 
        isAuthorized(this.userId)
    getKey : () -> 
        if isAuthorized(this.userId)
            Assets.getText('Key')
)