【问题标题】:Router-level middlewar: undefined object路由器级中间件:未定义对象
【发布时间】:2019-05-11 02:33:04
【问题描述】:

这是符合条件的:

someRouter.get('/...',
    (req, res, next) => {
            ...
    },
    (req, res) => {...}

虽然这不符合条件:

someRouter.get('/...',
            aMiddleware,
            (req, res) => {...}

const aMiddleware = (req, res, next) => {...}

后者给出错误:

Error: Route.get() requires a callback function but got a [object Undefined]
    at Route.(anonymous function) [as get] (/Users/Leon/Documents/Projects/NodeJS/DemoJWTinNodeJS/node_modules/express/lib/router/route.js:202:15)
    at Function.proto.(anonymous function) [as get] (/Users/Leon/Documents/Projects/NodeJS/DemoJWTinNodeJS/node_modules/express/lib/router/index.js:510:19)
    at Object.get (/Users/Leon/Documents/Projects/NodeJS/DemoJWTinNodeJS/src/routes/api/userRoute.js:30:12)
    at Module._compile (internal/modules/cjs/loader.js:723:30)
    at Module._compile (/Users/Leon/Documents/Projects/NodeJS/DemoJWTinNodeJS/node_modules/pirates/lib/index.js:99:24)
    at Module._extensions..js (internal/modules/cjs/loader.js:734:10)
    at Object.newLoader [as .js] (/Users/Leon/Documents/Projects/NodeJS/DemoJWTinNodeJS/node_modules/pirates/lib/index.js:104:7)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)

在我看来,它基本上是在抱怨 undefined object,它应该是一个中间件。

中间件函数体完全相同。请问怎么了?

【问题讨论】:

  • app.get() 中使用const 定义之前,请先移动它。 const 定义不像 var 那样被提升。
  • 谢谢。 @jfriend00。 var 也不起作用。在我把函数放在 app.get() 之前,问题就消失了。
  • 是的,关键是将const 定义移到它的用途之上,而不是切换到var

标签: node.js middleware


【解决方案1】:

如果使用const关键字,请在router前定义中间件,或者改为函数定义。

方法一:

const aMiddleware = (req, res, next) => {...}
someRouter.get('/...',
        aMiddleware,
        (req, res) => {...}

方法二:

someRouter.get('/...',
        aMiddleware,
        (req, res) => {...}
function aMiddleware(req, res, next){...}

【讨论】:

    【解决方案2】:

    一旦我把函数放在 app.get() 之前,问题就消失了。

    const aMiddleware = (req, res, next) => {...}
    omeRouter.get('/...',
                aMiddleware,
                (req, res) => {...}
    

    【讨论】:

      猜你喜欢
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 2017-03-08
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      相关资源
      最近更新 更多