javascript - 如果我输入了错误的密码,那么它只会带我到下一条路线而不保存用户
问题描述
我正在创建虚拟 Netflix 站点,但在注册页面中,我想保存不在数据库中的用户,如果用户存在于数据库中,则转到下一条路线。但是如果输入的电子邮件和输入的密码不匹配,那么我只想显示错误文本。但是,如果我输入了错误的密码,那么它只会将我带到下一条路线而不保存用户。我只是不明白那里发生了什么。这是我的 app.js 注册路线
app.get("/signup", (req, res) => {
Netflix.find({}, function (err, user) {
res.render("Signup", { email: app.get('data'), Users: user });
});
});
app.post("/signup", (req, res) => {
const User = new Netflix({
email: app.get('data'),
password: req.body.password
});
Netflix.findOne({ "email": app.get('data') }, { "password": req.body.password }, function (err, user) {
if(user){
res.redirect("/Netflix/Movies");
}
else{
User.save((err)=>{
if(err){
res.send(err);
}
else{
res.redirect("/Netflix/Movies");
}
});
}
});
});
这是 signup.ejs 文件。
<body>
<section class="section">
<div class="container3">
<header>
<div class="logo">
<img src="/image/Netflix_Logo_RGB.png" alt="Netflix logo"></img>
</div>
<a href="/signin">Sign In</a>
<div class="hr"></div>
</header>
<div id="error-text">
<i class="fas fa-exclamation-triangle"></i>
<p> <span>Incorrect password.</span>
Please try again or you can reset your password.</p>
</div>
<div class="containt">
<h3>
Welcome back, <%- email.substring(0, email.indexOf('@')); %>!<br>
Rejoining Netflix is easy.
</h3>
<p>Enter your password and you'll be watching in no time.<br></p>
<p class="main">
Email<br>
<span>
<%= email %>
</span>
</p>
<form class="continue" action="/signup" method="POST">
<input id="password" type="password" placeholder="Enter your password" name="password">
<p class="forgot">Forgot your password?</p>
<button onclick="check()">Continue</button>
</form>
</div>
</div>
</section>
<script type="text/javascript">
function check(){
let Users = <%- JSON.stringify(Users) %>;
console.log("hello");
Users.forEach(element => {
var enteredEmail = <%- JSON.stringify(email) %>;
var enteredPassword = document.getElementById("password").value;
if(element.email === enteredEmail && element.password === enteredPassword){
document.getElementById("error-text").style.display = "none";
}
else{
document.getElementById("error-text").style.display = "block";
document.getElementsByClassName("containt").style.top = "270";
}
});
}
</script>
</body>
解决方案
您的 findOne 未正确实现(findone 将一个对象作为参数),因此您将 user 作为{}
空对象并且是真实值
你也可能想findOne
这样写
Netflix.findOne({ "email": app.get('data'), "password": req.body.password }, function (err, user) {
推荐阅读
- angular - 如何拦截 :enter & :leave Angular 中的动画并改变 Diff?
- python - Apache Beam python 流式写入每小时 avro 文件
- ios - 有什么方法可以定期在后台模式(iOS)下发送 HTTP 请求?
- java - 使用 NumberFormat 在 JTextFormattedField 上不设置文本
- visual-studio - 为什么 SSRS 在已经定义时要求定义查询参数?
- react-native - 如何在运行时在反应本机的字典对象数组中添加动态数据
- html - HTML 边框出现在单元格之外
- jenkins - 从 Jenkins 管道并行步骤收集数据
- file - 如何为用户提供在 xamarin 表单中选择文件夹的选项?
- macos - Doxywizard 找不到乳胶