【问题标题】:Coffeescript and Passport: Strange behaviour, attaching functionsCoffeescript 和 Passport:奇怪的行为,附加功能
【发布时间】:2015-01-08 14:35:24
【问题描述】:

我一直在玩咖啡、快递和护照,似乎我并没有真正了解该语言的一些细节。

谁能给我解释一下,这是怎么回事?

当我像这样初始化passport.serializeUserpassport.deserializeUser 函数时:

passport.serializeUser (user, done)->
  done null, user

passport.deserializeUser (obj, done)->
  done null, obj

一切都按预期进行。

但我想从其他地方传递这些函数。 当我执行以下操作(在我看来应该完全相同)时,我会收到一个 TypeError,告诉我:“TypeError:object is not a function”,当护照尝试调用我的反序列化函数时。

serialize = (user, done) ->
  done null, user

deserialize = (obj,  done) ->
  done null, obj

passport.serializeUser = serialize
passport.deserializeUser = deserialize

我没有想法。这里有什么区别?

【问题讨论】:

    标签: express coffeescript passport.js


    【解决方案1】:

    这些:

    passport.serializeUser (user, done)->
      done null, user
    
    passport.deserializeUser (obj, done)->
      done null, obj
    

    正在调用passportserializeUserdeserializeUser 方法,并将它们作为参数传递给函数。它们与以下内容相同:

    s = (user, done) -> done(null, user)
    passport.serializeUser(s)
    
    d = (obj, done) -> done(null, obj)
    passport.deserializeUser(d)
    

    这些:

    serialize = (user, done) -> done null, user
    passport.serializeUser = serialize
    
    deserialize = (obj,  done) -> done null, obj
    passport.deserializeUser = deserialize
    

    正在为passportserializeUserdeserializeUser 属性分配新功能。

    所以第一个是以函数作为参数调用一些函数,第二个是用其他函数覆盖一些属性(恰好是函数)。

    【讨论】:

    • 啊...你当然是对的。谢谢。现在我的任务是:passport.serializeUser 序列化 passport.deserializeUser 反序列化而不是:passport.serializeUser = serialize passport.deserializeUser = deserialize 一切都很好。 :)
    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 2014-01-24
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多