gpt4 book ai didi

node.js - 为什么 res.redirect ('/' )不起作用?

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:17 24 4
gpt4 key购买 nike

我正在 Node.js 上使用 Express 框架实现一个简单的登录/注销场景。对于登录,我没有任何问题:单击“登录”后,提供正确的用户名和密码后,用户将正确重定向到 clientPage:

//POST route for logging in
router.post('/login', function (req, res, next) {
if (req.body.logusername && req.body.logpassword) {

User.authenticate(req.body.logusername, req.body.logpassword, function (error, user) {
if (error || !user) {
var err = new Error('Wrong email or password.');
err.status = 401;
return next(err);
} else {
req.session.userId = user._id;
return res.redirect('/clientPage');
}
});
} else {
var err = new Error('All fields required.');
err.status = 400;
return next(err);
}
})

// GET route after registering
router.get('/clientPage', function (req, res, next) {
User.findById(req.session.userId)
.exec(function (error, user) {
if (error) {
return next(error);
} else {
if (user === null) {
var err = new Error('Not authorized! Go back!');
err.status = 400;
return next(err);
} else {
return res.sendFile(path.join(__dirname + '/../views/clientPage.html'));
}
}
});
});

注销时的行为会发生变化,尽管情况并没有那么不同:单击客户端页面中的“注销”按钮,会调用“logout()”函数,该函数会向“/logout”,由我的路线脚本处理:

function logout(){
$.ajax({
type: "GET",
url: '/logout',
async: true,
})

}

// GET for logout
router.get('/logout', function (req, res, next) {
if (req.session) {
// delete session object
req.session.destroy(function (err) {
if (err) {
return next(err);
} else {
return res.redirect('/');
}
});
}
});

在浏览器的“网络”选项卡中,我看到第一个请求获得“200 OK”响应并成功将客户端重定向到给定页面,而注销请求导致“304 Not Modified”答案,包含在响应中我想要的页面(根,即我的主页),但不会将当前页面重定向到新页面。

最佳答案

出现此问题是因为您将注销作为 ajax 请求发送。这会导致您的 ajax 请求被重定向,但您的页面不会被重定向。您想要做的是通过在注销按钮上设置链接来直接从页面发送请求。

<a href="/logout">log out<a/>

这样,您的整个页面将被重定向。

关于node.js - 为什么 res.redirect ('/' )不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47395928/

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