首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >use /express:将router.route()与中间件函数一起使用

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

Stack Overflow用户
提问于 2019-06-13 03:29:13
回答 1查看 81关注 0票数 2

我想在express路由器上使用HTTP ()方法来为具有不同方法的特定路由提供服务。下面的代码运行良好:

代码语言:javascript
复制
var express = require('express');
var router  = express.Router();

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

然而,当我试图在post路由上使用中间件时,我被卡住了。下面的代码可以工作:

代码语言:javascript
复制
// LOGIN processing
router.post('/login', passport.authenticate("local", {
  successRedirect: '/',
  failureRedirect: '/login'
}), function(){
  //empty
});

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

现在,我想对这段代码进行重构,并使用类似于上面显示的代码示例(注册路由),即我想使用router.route('/login).xxxx在路由'/login‘上为HTTP request xxxx提供服务。我如何告诉express在对‘/ passport.authenticate’的POST请求中使用我的登录中间件函数?

代码语言:javascript
复制
router.route('/login')
  .get(adm.loginForm)
  .post(<my-middleware-function ???>, adm.login);

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

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

有什么建议吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-13 03:37:14

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

代码语言:javascript
复制
router.route('/login').post(checkPassport, adm.login)

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

代码语言:javascript
复制
router.route('/login').post(checkPassport).post(adm.login)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56569169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档