如何解决 NodeJS、MySQL 中无法 GET /logout 的问题

Posted

技术标签:

【中文标题】如何解决 NodeJS、MySQL 中无法 GET /logout 的问题【英文标题】:How to resolve Cannot GET /logout in NodeJS, MySQL 【发布时间】:2021-06-25 03:06:46 【问题描述】:

我有一个问题,我无法解决注销功能。我参考了不同的网站和 youtube 教程,但我看到的只是关于 Mongo 的注销等。

在我的 “controllers”文件夹 >“auth.js” 中,我有一个用于注销会话的 sn-p 代码。基本上,它会清除存储的 cookie。我的注册和登录功能有效。另一方面,注销很困难。

//Logout Session for USER
exports.logout = (req,res) => 
    res.clearCookie('jwt');
    res.redirect('shop/login');
;

在我的“routes”文件夹>“user.js”中,我有这个注销代码。

router.get('/profile', (req, res) => 
    if (req.session.login) 
        res.render('shop/profile');
     else 
        res.send('Please login to view this page!');
    
    res.end();
);

//LOG OUT 
router.post('/logout',(req, res)=>
  req.logOut();
  res.redirect("shop/login");
);

最后,在“views”文件夹>“profile.ejs”,我有这段代码。

<div class="container">
    <div class="row">
        <div class="col-sm-8 mt-5">
            <p class="headline2">Welcome!</p>
            <h1><a href="/logout">Log out</a></h1>
        </div>
    </div>
</div>

【问题讨论】:

您似乎从模块中导出注销。然后,您尝试通过 req 访问 logOut(不同大小写)函数。您是否有一些中间件将导出的注销功能附加到 req.logOut? 哦,我没有 req.logOut 功能。不过,我开始进步了,因为 Bijay Sharma 建议使用 GET(logout) 而不是 POST(logout)。 【参考方案1】:

根据您的代码,Log Out 应该是 GET 请求而不是 POST。

请更新“routes”文件夹>“user.js”如下:

router.get('/profile', (req, res) => 
    if (req.session.login) 
        res.render('shop/profile');
     else 
        res.send('Please login to view this page!');
    
    res.end();
);

//LOG OUT 
router.get('/logout', authController.logout);

请确保您已导入 logout() 函数

【讨论】:

"TypeError: req.logOut 不是函数。"结果就是这样,不好意思问一下,请问“req.logOut”函数在哪里可以放? 导入注销功能。并使用 logout() 而不是 req.logOut()。我已经更新了答案中的代码 sn-p。请重新检查 "ReferenceError: logout is not defined" 我试图将代码 [下面] 导入 //LOG OUT, "router.post('/logout', authController.logout);" 导出注销中间件,然后将其导入 user.js 更新您的 router.post('/logout', authController.logout);到 router.get('/logout', authController.logout); .如果问题仍然存在,请上传整个源代码。 代码还是有问题,可以通过GitHub分享给大家。但它在一个私人存储库中,请问您在 GitHub 中的电子邮件/用户名吗?

以上是关于如何解决 NodeJS、MySQL 中无法 GET /logout 的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用nodejs更新mysql json数组

如何在NodeJS中代理websocket连接到其他websockets

使用mysql在nodejs中进行分页

如何通过nodejs中的get请求使用req.body

nodejs做http请求转发,解决js跨域问题(二)

如何在nodejs获取请求中访问axios参数