检查URL中的GET变量

时间:2016-08-29 01:23:13

标签: javascript node.js express pug

所以我使用Jade和ExpressJS在我的网站上创建了一个简单的登录表单。一切正常,我遇到的唯一问题是当用户输入错误的登录详细信息时。当他们输入错误的详细信息时,我会使用URL中的参数(/admin?falseLogIn)将它们重定向到登录页面。我的问题是:如何检查我的玉视图中是否存在此GET变量?

这是我的代码:

登录in.jade

form(action="/log-in" method="post")
    label Username
    input(type="text" class="form-control" name="username" placeholder="Username")
    label Password
    input(type="text" class="form-control" name="password" placeholder="Password")
    input(type="submit" class="btn btn-info pull-right" style="margin-top: 15px;" value="Log In")

app.js

app.get("/admin",function(req, res){

    if(req.session.userName){
        res.render("admin", {session_name: req.session.userName});
    }else{
        res.render("log-in");
    }

});

app.post("/log-in", function(req, res){

    var admin = Admin.findOne({"username": req.body.username, "password": req.body.password});
    admin.count(function(error, count){
        //console.log(count);
        if(count > 0){
            req.session.userName = req.body.username;
            res.redirect("/admin");
        }else{
            res.redirect("/admin?falseLogIn");
        }
    });
});

我在我的玉视图中尝试了以下内容,但出现错误Cannot read property 'location' of undefined

- var page = window.location.pathname

if page === "/admin?falseLogIn"
    .alert.alert-danger Error! Wrong details, please try again!

我来自PHP背景,所以在PHP中我可以直接使用html检查:

<?php if(isset($_GET['falseLogIn'])){// display error to user } ?>

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:2)

首先,我建议您使用查询字符串的完整键值/admin?login=false

然后,您使用req.query获取特定变量并传入您的玉视图或使用res.locals在您的视图中访问该变量。

<强> app.js

app.get("/admin",function(req, res){

  res.locals.login = req.query.login; // this would be accessible in your view as 'login'

  if (req.session.userName) {
    res.render("admin", {session_name: req.session.userName});
  } else {
    res.render("log-in", {
      login: req.query.login, // or pass variable to your view directly, also accessible in your view as 'login'
    });
  }
});

推理。我不认为在您的视图中直接解析您的网址查询是一种好习惯。虽然这对于使用$ _GET的原始php来说很好,但是如果你使用像Laravel这样的MVC框架,你会很快摆脱它。让控制器根据查询完成处理逻辑的工作,并将相关信息传递给视图。然后在您看来,它应该是简单的表示逻辑。

答案 1 :(得分:0)

您应该在script(type='text/javascript').

下写下脚本
script(type='text/javascript').
  var page = window.location.pathname

但是如果你想比较网址,你应该得到search部分而不是pathname

script(type='text/javascript').
  var page = window.location.search
  if(page === '?falseLogIn'){/* some code here, display the error */}