微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Node.js / Express:POST变为GET(代码302)

简而言之,我有一个登录页面,我的POST请求在Express 4中变为GET.

这是我的登录页面的业务部分:

<form id='loginForm' action='/login' method='post'>
    <table>
        <tr>
            <td><input type='text' name='username' /></td>
        </tr>
        <tr>
            <td><input type='text' name='password' /></td>
        </tr>
        <tr>
            <td><button type='submit'>Submit</button></td>
        </tr>
    </table>
</form>

这是我设置的路线:

// Express 4    
var router = express.Router();

router.get('/login',function(req,res) {
    res.render('./login.hbs',{ message: req.flash('loginMessage') });
});

router.post('/login',passport.authenticate('local-login',{
    successRedirect: '/welcome',failureRedirect: '/login',failureFlash : true
}));

passport.use('local-login',new LocalStrategy(
        {
            usernameField: 'email',passwordField: 'password',passReqToCallback : true
        },email,password,next) {
            User.findOne({ 'authLocal.email' :  email },function(err,user) {
            console.log('Inside local-login strategy with findOne A');
            [snip]

我在res.render上为GET / login和本地登录策略中的findOne()调用设置了一个断点.当我单击“提交”按钮时,捕获事物的断点位于router.get()代码中.

在调试器中,req.method是GET.

在浏览器(Chrome)中,我被告知我正在对返回302的/登录进行POST.还有一个待处理的GET /登录,带有200个代码.这两个代码(302,200)是调试器在router.get()中停止的时间.即使清除浏览器缓存也无济于事.

有人能告诉我为什么我的POST请求没有被尊重?

解决方法

简单的答案

POST /登录变为GET /登录302的原因是护照模块完成的重定向.

请参阅以下代码中的failureRedirect:

router.post('/login',failureFlash : true
}));

当提供的凭据无效或服务器因任何原因无法进行身份验证时,可能会发生此问题.

快乐帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐