Javascript 检查URL中的GET变量

Javascript 检查URL中的GET变量,javascript,node.js,express,pug,Javascript,Node.js,Express,Pug,所以我在我的网站上用Jade和ExpressJS制作了一个简单的登录表单。一切正常,我唯一的问题是当用户输入错误的登录详细信息时。当他们输入错误的详细信息时,我会将他们重定向到URL中带有参数的登录页面(/admin?falseLogIn)。我的问题是:如何检查jade视图中是否存在这个GET变量 这是我的代码: 登录。jade form(action="/log-in" method="post") label Username input(type="text" class=

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

这是我的代码:

登录。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");
        }
    });
});
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'
    });
  }
});
我在jade视图中尝试了以下操作,但出现错误
无法读取未定义的属性“location”:

- 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 } ?>


非常感谢您的帮助。谢谢

您应该在
script(type='text/javascript')下编写脚本。

但是,如果要比较url,则应获取
搜索
部分,而不是
路径名

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

您应该在
script(type='text/javascript')下编写脚本。

但是,如果要比较url,则应获取
搜索
部分,而不是
路径名

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

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

然后使用
req.query
获取特定变量并传递到jade视图中,或者使用
res.locals
使变量在视图中可访问

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

推理。我认为直接在视图中解析url查询不是一个好的做法。虽然这对于原始php很好,比如您使用$_-GET的示例,但如果您使用MVC框架,比如Laravel,您很快就会远离它。让控制器根据查询处理逻辑,并将相关信息传递给视图。那么在您看来,它应该是简单的表示逻辑。

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

然后使用
req.query
获取特定变量并传递到jade视图中,或者使用
res.locals
使变量在视图中可访问

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

推理。我认为直接在视图中解析url查询不是一个好的做法。虽然这对于原始php很好,比如您使用$_-GET的示例,但如果您使用MVC框架,比如Laravel,您很快就会远离它。让控制器根据查询处理逻辑,并将相关信息传递给视图。那么在您看来,它应该是简单的表示逻辑。

admin页面中的Req.query.false登录controller@Kevin谢谢,但是我到底需要把代码放在哪里?在管理页面中的Req.query.false登录controller@Kevin谢谢,但我到底需要把密码放在哪里?谢谢,我添加了脚本标记,并且能够获得路径和搜索查询(/admin?false登录)。现在唯一的问题是当我试图比较URL以显示错误消息时。这部分不起作用。实际上,
window.location.pathname
不包括url的搜索部分,我刚刚更新了答案,请检查一下。谢谢,我添加了脚本标记,我能够获得路径和搜索查询(/admin?falseLogIn)。现在唯一的问题是当我试图比较URL以显示错误消息时。这部分不起作用。实际上,
window.location.pathname
不包括url的搜索部分,我刚刚更新了答案,请检查一下。谢谢,我对这一点有点陌生,所以我仍在尝试掌握诀窍。所以是的,它现在起作用了。再次感谢!:)谢谢,我对这有点陌生,所以我还在努力掌握窍门。所以是的,它现在起作用了。再次感谢!:)