gpt4 book ai didi

node.js - 快速重定向不会改变 req.url

转载 作者:搜寻专家 更新时间:2023-10-31 22:53:10 25 4
gpt4 key购买 nike

我有一个在成功登录后重定向的路由

app.post('/login', function(req, res){
if(req.body.password === Server.cfg.auth.userPass) {
req.session.user = {nick: req.body.username, pass: req.body.password}
res.redirect('/chat')
} else {
res.render('user/login', { locals: { error: 'Invalid password' } })
}
})

当使用正确呈现的 jade 文件刷新页面时,重定向似乎有效。但是,url 仍然显示/login 并且我的 pageTitle 变量(通过模板变量设置)也没有改变。如果我在重定向后刷新页面,所有内容都会更改为应有的方式。只有在重定向之后它才不会改变。

最佳答案

对于试图处理来自服务器控制的开发背景的 ajax 重定向的人们来说,这一定是一个非常常见的混淆。我的示例显示了如果授权失败会发生什么,略有不同;但是您可以使用拦截响应和检查状态等相同的概念,让客户端 JavaScript 执行重定向。

我的客户端代码实际上是一个 Backbone 模型,但反过来又像这样调用 jquery 的 ajax:

model.save({ error:function... 

服务器

function requiresLogin(req, res, next) {  
if(req.session.user) {
next();
} else {
//res.redirect('/sessions/new?redir=' + req.url); // won't work
res.send("Unauthorized", 403); // send 403 http status
}
}

客户端

  // Assumes you can get http status from response
error: function(resp, status, xhr)...
if(resp.status === 403) {
window.location = '/sessions/new'; // optionally put a redirLastPage=somewhere
}

这符合我的需要。我还建议谷歌搜索 ajax post redirects 看看为什么会这样

关于node.js - 快速重定向不会改变 req.url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8723975/

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