node.js / express:使用带有中间件函数的router.route()

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (107)

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

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

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

但是,当试图在后期路线上使用中间件时,我会陷入困境。以下代码有效:

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

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

现在,我想重新考虑这个代码并使用类似于上面显示的代码示例(注册路由),即我想使用router.route('/ login).xxxx来服务HTTP请求xxxx on route'/ login'。如何告诉快递在POST请求中使用我的passport.authenticate中间件功能'/ login'?

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

...其中adm.loginForm是在向/ login 发出GET请求时发出登录表单的端点函数,而adm.login是服务器在此路由上收到POST请求时应调用的端点函数,即一旦提交登录表单。

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

有什么建议?谢谢。

提问于
用户回答回答于

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

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

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

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

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

扫码关注云+社区

领取腾讯云代金券