javascript - 在express.js服务器中使用条件

标签 javascript node.js express

如何在我的express.js 服务器中使用条件。如果用户登录,我想更改根和端服务器渲染我的 react 应用程序。如果用户登录,此条件不起作用 if(!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'});
        })
    }

@edit/zaloguj,/funkcje 这是我的静态根

最佳答案

首先,使用 session 而不是标志实现登录。

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 中间件 ( http://expressjs.com/en/guide/using-middleware.html#middleware.router )。使用如下所示的身份验证中间件,您不必添加包装路由定义的条件 block 。

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

关于javascript - 在express.js服务器中使用条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47532076/

相关文章:

javascript - 如何将数据从 ejs(日期选择器)传递到 js(查询数据库),然后将结果显示回 ejs(在标签中)?

javascript - 我无法使用可选字符串和参数创建路由路径 - ExpressJS

javascript - 如何使用 jQuery 仅检索隐藏输入上逗号分隔值中的第二项

javascript - 用纯 Javascript 翻译基本的身份验证请求

node.js - 为什么当我运行 npm test 时,较新版本的 mocha 不输出测试详细信息?

javascript - 删除部分 JSON

javascript - 使用 Javascript 更改类时出现问题

javascript - 检索 HTML 元素的位置 (X,Y)

javascript - 使用 immutable.js 时如何将 update 更改为 updateIn

node.js - 返回类中的中间件