Javascript express.js服务器中的使用条件

Javascript express.js服务器中的使用条件,javascript,node.js,express,Javascript,Node.js,Express,如何在express.js服务器中使用条件。如果用户登录,我想更改根和端服务器呈现我的react应用程序。这种情况不工作,如果!isLoggin如果用户登录我将其更改为true,那么这应该使用react呈现我的索引。问题出在哪里 if(typeof(isLoggin)=='undefined'){ var isLoggin = false; } //roots if(!isLoggin){ //index app.get

如何在express.js服务器中使用条件。如果用户登录,我想更改根和端服务器呈现我的react应用程序。这种情况不工作,如果!isLoggin如果用户登录我将其更改为true,那么这应该使用react呈现我的索引。问题出在哪里

 if(typeof(isLoggin)=='undefined'){
        var isLoggin = false;
    }
    //roots

    if(!isLoggin){
        //index
        app.get('/', function(req, res){
            res.render("indexNotLogin",{title:''});
        })
        //funkcje
        app.get('/funkcje', function(req, res){
            res.render("funkcje",{title:'Funkcje'});
        })

        //zaloguj
        app.get('/zaloguj', function(req, res){
            res.render("zaloguj",{title:'Zaloguj się'});
        })
        //zaloguj
        app.post('/trylogin', function(req, res){
            var username = req.body.name;
            var password = req.body.password;
            connection.query("SELECT * FROM user WHERE username='"+username+"' AND pass='"+password+"'", function(error, rows,fields){
                //callback
                if(!!error){
                    console.log('error in query');
                }else{
                    if(rows.length){
                        res.send('user zalogowany')
                        isLoggin=true;
                    }else{
                        res.send('user nie istnieje')
                    }
                }
            })

        })
    }else{
        console.log("to jest true: "+isLoggin);
        app.get('/', function(req, res){
            res.render("index",{title:'Zaloguj sie'});
        })
    }

@编辑/zaloguj,/funkcje这是我的静态根目录

首先,使用会话实现登录,而不是使用标志

app.post('/trylogin', function(req, res){
  var username = req.body.name;
  var password = req.body.password;
  connection.query("SELECT * FROM user WHERE username='"+username+"' AND pass='"+password+"'", function(error, rows,fields){
    if(!!error){
      console.log('error in query');
    }else{
      if(rows.length){
        res.send('user zalogowany')
        req.session.user_id = put_user_id_here
      }else{
        res.send('user nie istnieje')
      }
    }
  })
})
如果要检查用户是否登录以限制访问,最好实现自己的Express中间件。使用下面这样的身份验证中间件,您不必添加包装路由定义的条件块

app.use(function(req, res, next) {
  if (req.session.user_id) {
    next();
  } else {
    res.status(401).send('Unauthorized')
  }
});
像这样

function checkAuth(req, res, next) {
    console.log('Jakies id: '+req.session.user_id);

  if (!req.session.user_id) {
      if(req.route.path=='/'){
          res.render("indexNotLogin",{title:''});
      }else{
        res.send('You are not authorized to view this page');
    }
  } else {
    next();
  }
}
成功登录后我的根目录:

//index
app.get('/', checkAuth, function(req, res){
    res.render("index",{title:''});
})

注意SQL INJECTION connection.querySELECT*从username='+username+'和pass='+password+'的用户,您不需要isLoggin标志,也不需要使用一些有条件的添加/删除路由,这会增加巨大的复杂性。更好地使用会话我应该在结束请求时添加限制1?但如何在“/”根目录上实现它?登录前和登录后的其他页面?您可以检查是否设置了req.session.user_id以更改根页面。是的,类似于此。