我正在尝试为我的路由编写代码,如果session.user_id未定义,则重定向回主页。由于某种原因,重定向没有执行,并且mysql条件被触发并且它崩溃了服务器,因为session.user_id是未定义的并且它无法加载没有该数据的游戏。
有没有办法在所有路由上使用通用重定向,如果会话不可用,重定向回登录?
router.get('/game', function(req,res) {
console.log(req.session.user_id);
if (req.session.user_id === "undefined") {
res.redirect('/');
}else {
var condition = 'userId = ' + req.session.user_id;
projectX.allGameData(condition, function(data){
var hbsObject = {heroes : data, logged_in: req.session.logged_in, isUser: req.session.isUser, isAdmin: req.session.isAdmin}
res.render('game', hbsObject);
});
};
});
答案 0 :(得分:1)
我假设值为undefined
,而不是"undefined"
(这是一个包含单词“undefined ”的字符串):
if (req.session.user_id === undefined) {
...
}
答案 1 :(得分:1)
你应该使用:
if (req.session.user_id === undefined)
OR
if ( typeof req.session.user_id === "undefined")
除此之外,通常还有一个中间件功能可以检查用户会话。这样,您只需在所有路由中插入对此中间件的调用,这需要用户登录:
router.get('/game', checkUserSession, function(req,res) {
// Your code here
});
function checkUserSession( req, res, next )
{
if( req.session.user_id )
{
next();
}
else
{
res.redirect('/homepage');
}
}//checkUserSession()
答案 2 :(得分:0)
-E
添加一个函数来处理Auth检查,然后注入是路由器的中间件。