如果会话不可用,则redirectnode.js

我正在尝试编写我的路由的代码,如果session.user_id未定义redirect回到主页。 出于某种原因,redirect不会执行,并且会触发mysql条件并导致服务器崩溃,因为session.user_id是未定义的,并且不能在没有该数据的情况下加载游戏。

有没有办法使用通用redirect的所有路线,如果会议不可用redirect回login?

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); }); }; }); 

你应该使用: if (req.session.user_id === undefined)

OR if ( typeof req.session.user_id === "undefined")

除此之外,通常会有一个中间件function来检查用户会话。 这样,您可以将呼叫插入到所有路由中的中间件,这需要用户login:

 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() 

我假设这个值是undefined ,而不是"undefined" (这是一个包含单词“undefined ”的string):

 if (req.session.user_id === undefined) { ... } 
 //Inject authHandler as middleware router.get('/my/route/', authHandler, (req, res) => { //secure point, the authHandle went thru }); function authHandler(req, res, next) { if (req.session.user_id) { next(); } res.redirect('/login/'); } 

添加一个函数来处理Auth检查,然后注入是一个中间件到你的路由器。