Javascript 检查URL中的GET变量
所以我在我的网站上用Jade和ExpressJS制作了一个简单的登录表单。一切正常,我唯一的问题是当用户输入错误的登录详细信息时。当他们输入错误的详细信息时,我会将他们重定向到URL中带有参数的登录页面(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=
/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的搜索部分,我刚刚更新了答案,请检查一下。谢谢,我对这一点有点陌生,所以我仍在尝试掌握诀窍。所以是的,它现在起作用了。再次感谢!:)谢谢,我对这有点陌生,所以我还在努力掌握窍门。所以是的,它现在起作用了。再次感谢!:)