服务器上的路由弄乱了客户端的路由?
Posted
技术标签:
【中文标题】服务器上的路由弄乱了客户端的路由?【英文标题】:Routing on the server messes up routing on the client side? 【发布时间】:2014-05-04 03:55:51 【问题描述】:使用 passport.js 在用户登录之前我不需要任何客户端 javascript。
在我的服务器端,我有一个处理一些登录逻辑的路由器。所以当用户成功登录后,我将用户路由到/profile
路由。
这让我很困惑,因为 express 正在处理整个框架。 /profile
路由渲染了我的配置文件模板res.render('profile', user : req.user );
并很好地将用户的服务器模型传递到模板中,很酷的东西!
但这就是让我着迷的原因,如果我的应用程序现在位于 /profile
上,我的目录中不存在一个路径,而我在这里定义了我的目录 app.use('/', express.static(path.join(__dirname, 'public')));
,这会导致架构错误。
因为有时我的 js css 会出现 404 错误。我必须在我的客户端骨干路由器上像这样/routes#chat
路由。
我的问题
那么在用户成功后以某种方式重定向回localhost:3000
并现在销毁登录视图并呈现用户配置文件视图是否是个好主意?有人可以告诉我如何进行这样的路由吗?我有一个大概的想法,但当我认为服务器端需要与客户端进行通信时,我不太确定该怎么做?
如果以上是一个坏主意,有人可以给我建议如何更好地看待这个吗?
编辑:路线
app.get('/', function(req, res)
res.render('index');
);
app.get('/login', function(req, res)
res.render('login', message: req.flash('loginMessage') );
);
app.get('/profile', isLoggedIn, function(req, res)
res.render('profile', user : req.user );
res.redirect('/');
io.sockets.on('connection', function (socket)
socket.userName = req.user.local.email;
users[socket.userName] = socket;
console.log(Object.keys(users))
);
);
【问题讨论】:
基础/
服务器路由先检查isLogin
,如果真渲染profile
,假渲染/直接到/login
。登录后重定向到/
是的,我试过了,所以我让用户保存在会话中。但是当重定向到/
时,我如何将用户属性传递给模板。如果我重定向到/
,它将使用包含两个按钮的 index.handlebars,登录或注册。
我的意思是你的 index.handlerbar 需要是个人资料页面。你当前的索引变成 login.handlerbar。
哦,有道理我没有那样想。谢谢,让我试着改变一下。
好的,我明白你在说什么。我的问题是,如果我设置了默认路由,那么每当我返回该路由时,它都会运行初始路由。因此,通过路由回/
,它会运行任何设置。
【参考方案1】:
使用 session 记住登录或使用一些自定义函数来查询登录状态。
app.get('/', function(req, res)
if (req.session.isLogin)
res.render('profile', user : req.user );
// put other code here
else
res.redirect('/login');
);
app.get('/login', function(req, res)
res.render('login', message: req.flash('loginMessage') );
);
【讨论】:
哦,太好了,我是路由和所有这些东西的新手。我很欣赏这个例子。很高兴你回应我正在摆弄我的理智:) 我的路由中间件看起来像这样function isLoggedIn(req, res, next) if (req.isAuthenticated()) return next(); res.redirect('/');
但req.session.isLoggedIn
似乎返回未定义?
所以由于我使用的是passport.js,看来我需要使用req.user
它可以工作,不确定它是否安全?但是***.com/questions/18739725/…
是 if (req.user)
一个好的解决方案,而不是 if (req.session.isLogin)
声音关闭和生病肯定会给你一个绿色检查。感谢您的洞察力....
您是否使用 passport.js 进行身份验证?或者我从任何其他问题中弄错了。以上是关于服务器上的路由弄乱了客户端的路由?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google App Engine 作为后端的 Google Cloud Load Balancer 上的 GeoDNS 路由