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
是您需要编写的处理护照身份验证逻辑的中间件
我想在快速路由器上使用 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
是您需要编写的处理护照身份验证逻辑的中间件