node.js/express:将 router.route() 与中间件函数一起使用

node.js/express: use router.route() with middleware functions

我想在快速路由器上使用 route() 方法来为具有不同 HTTP 方法的特定路由提供服务。以下代码工作正常:

var express = require('express');
var router  = express.Router();

router.route('/register')
  .get(adm.signUpForm)
  .post(adm.signUp);

但是,当尝试在 post 路由上使用中间件时,我遇到了困难。以下代码有效:

// LOGIN processing
router.post('/login', passport.authenticate("local", {
  successRedirect: '/',
  failureRedirect: '/login'
}), function(){
  //empty
});

这里调用中间件函数passport.authenticate(...) 来检查用户凭据是否有效。经过身份验证的用户将被重定向到位于“/”的主页;未知用户(或密码不正确的用户)被重定向回“/login”表单。

现在,我想重构这段代码并使用类似于上面显示的代码示例(注册路径)的东西,即。 e.我想使用 router.route('/login).xxxx 来为路由 '/login' 上的 HTTP 请求 xxxx 提供服务。我如何告诉 express 在对“/login”的 POST 请求上使用我的 passport.authenticate 中间件功能?

router.route('/login')
  .get(adm.loginForm)
  .post(<my-middleware-function ???>, adm.login);

... 其中 adm.loginForm 是根据 GET 请求发出登录表单的端点函数/login 和 adm.login 是服务器收到 POST 请求时应调用的端点函数这条路线,我。 e.提交登录表单后。

据我所知,express (4.x) 文档没有提及任何有关为特定路由安装中间件功能的内容 和(同时) 特定的 HTTP 请求。我知道 router.route('/login').use() 可以用来为 all HTTP 请求安装一个中间件函数在这条路线上,但我只希望在 POST 请求时调用我的中间件。

有什么建议吗?谢谢。

您可以在您提到的地方添加它们:

router.route('/login').post(checkPassport, adm.login)

您也可以将它们链接在一起:

router.route('/login').post(checkPassport).post(adm.login)

checkPassport 是您需要编写的处理护照身份验证逻辑的中间件