在Express中使用中间件原因404

问题描述

我正在将express.js与express路由器一起使用。我的文件如下:

./路由器 -> api.js

./控制器 -> ApiController.js

api.js内部,我将请求发送到ApiController。看起来像这样:

router.get('/',ApiController.home)

在内部控制器中,它看起来像这样:

exports.home = (req,res,next)=>{res.send('hello') }

我有这样的中间件:

function authenticate(req,next) {
    //Some functions here
      next()
    })
  }

如果我更改控制器并添加中间件,如下所示:

exports.home = authenticate,(req,res)=>{res.send('hello') }

我会得到404。任何想法有什么问题吗?

解决方法

您要在声明获取路由器时添加中间件

 router.get('/',authenticate,ApiController.home)

如果您正在做自己的事

 exports.home = authenticate,(req,res)=>{res.send('hello') }

这基本上是说export.home =进行身份验证,并忽略具有res.send的函数。因此,当您单击exports.home函数时,它将仅具有next(),而不会重新发送给客户端。下一个将使请求通过,它将到达最后一个错误处理程序,该错误处理程序将向您返回404,因为从未收到响应。