【问题标题】:Method wont return correct unless wrapped in arrow function除非包装在箭头函数中,否则方法不会返回正确
【发布时间】:2018-09-06 03:26:05
【问题描述】:

在我的 Node/Express API 中,为了保护我的路线,我是 passport.authenticate

app.get('/', passport.authenticate('jwt', { session: false}), (req, res) => { //whatever })

我在这些路由上有额外的中间件,它变得相当长,我不想要求护照进入我的所有路由器文件,所以在一个单独的文件中,我在一个名为protect的现有身份验证对象上创建了另一个方法

const auth = {
   protect() {}
}

这让我可以这样做

app.get('/', auth.protect, (req, res) => { //whatever })

最初我尝试返回 passport.authenticate

const auth = {
   protect() {
      return passport.authenticate('jwt', { session: false})
   }
}

但这不起作用

然后我将它包裹在箭头函数中

const auth = {
    protect() {
       () => passport.authenticate('jwt', { session: false})
    }
}

现在,当我在路线上调用 auth.protect 时,它工作得很好。

另外,如果我只是导出一个箭头函数

export const protect = () => {
   return passport.authenticate('jwt', { session: false})
}

当我在路线上调用 protect 时,这也有效。

为什么我需要用我想运行的代码返回一个箭头函数,为什么当我在我的路由上调用函数时第一个返回的例子不起作用?

【问题讨论】:

    标签: javascript node.js function express middleware


    【解决方案1】:

    第一个例子似乎返回函数执行的结果,第二个例子返回一个函数。

    【讨论】:

      【解决方案2】:

      Wktrf 很赚钱。详细说明: app.get() 需要两个参数,一个路径和一个回调函数。 http://expressjs.com/en/api.html#app.get

      const auth = {
         protect() {
            return passport.authenticate('jwt', { session: false})
         }
      }
      

      上面返回的是passport.auth的结果。然而,app.get() 需要一个函数作为参数。

      const auth = {
          protect() {
             () => passport.authenticate('jwt', { session: false})
          }
      }
      

      您的第二个示例返回一个函数:() => passport.authenticate('jwt', { session: false}) 然后哪个 app.get() 可以使用。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-02
        • 1970-01-01
        • 1970-01-01
        • 2019-05-11
        • 1970-01-01
        • 1970-01-01
        • 2018-07-19
        • 2019-02-04
        相关资源
        最近更新 更多