我想在快递路由器上使用方法 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请求中调用我的中间件。
有什么建议吗?谢谢。
答案 0 :(得分:1)
您可以将它们添加到您提到的位置:
router.route('/login').post(checkPassport, adm.login)
您还可以将它们链接在一起:
router.route('/login').post(checkPassport).post(adm.login)
checkPassport
是您需要编写的用于处理护照认证逻辑的中间件