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

时间:2019-06-12 19:29:12

标签: node.js express router middleware

我想在快递路由器上使用方法 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”表单。

现在,我想重新分解此代码,并使用类似于上面显示的代码示例(注册路线)的某种方式,即。 e。我想使用 router.route('/ login).xxxx 为路由“ / login”上的HTTP请求xxxx提供服务。如何告诉快递在POST请求上使用我的password.authenticate中间件功能来“登录”?

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

...,其中 adm.loginForm 是端点功能,该端点功能根据对/ login和 adm.login < / strong>是服务器在此路由上收到 POST 请求时应调用的端点函数,即e。登录表单提交后。

据我所知,快速(4.x)文档未提及有关为特定路由和(同时)特定HTTP请求安装中间件功能的任何内容。我知道 router.route('/ login')。use()可用于为此路由上的 all HTTP请求安装中间件功能,但我只想要POST请求中调用我的中间件。

有什么建议吗?谢谢。

1 个答案:

答案 0 :(得分:1)

您可以将它们添加到您提到的位置:

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

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

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

checkPassport是您需要编写的用于处理护照认证逻辑的中间件