所以我使用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 } ?>
非常感谢任何帮助。谢谢!
答案 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 */}