gpt4 book ai didi

node.js/express : use router. 具有中间件功能的route()

转载 作者:太空宇宙 更新时间:2023-11-03 22:05:00 25 4
gpt4 key购买 nike

我想在快速路由器上使用方法 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是端点函数,它根据对/login和adm.login<的GET请求发出登录表单/strong> 是当服务器在此路由上收到 POST 请求时应调用的端点函数,即e.提交登录表单后。

据我所知,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 是您需要编写的处理护照身份验证逻辑的中间件

关于node.js/express : use router. 具有中间件功能的route(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56569169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com