繁体   English   中英

如何使用nodejs检查mongodb中是否存在登录凭据?

[英]How do I check if login credentials is present in mongodb using nodejs?

我正在使用node.js和mongodb进行小型登录和注册,并具有诸如express,mongoose和body-parser之类的依赖项。 我无法使登录部分正常工作。 就我而言,即使使用了错误的凭据,也会进行登录。 请查看我的代码并为我提供帮助。

这是我的index.js node.js代码。

 const express = require('express'); const bodyParser = require('body-parser') const mongoose = require("mongoose"); var app = express(); var path = require('path'); app.use('/static', express.static(path.join(__dirname, 'public'))); app.use(bodyParser.urlencoded({extended: false})); mongoose.connect("mongodb://localhost:27017/test", { useNewUrlParser: true }); var Schema=mongoose.Schema; var registerSchema = new Schema({ uname:String, psw:String }); var reg = mongoose.model('reg',registerSchema); app.get("/", (req,res)=>{ res.sendFile(path.join(__dirname + '/index.html')); }); app.post("/register", (req,res)=>{ const user= new reg(req.body); if(reg.findOne({uname:req.body.name})){ res.send("Username is taken"); } else{ user.save() .then(user => { res.send("User added succesfully.") }) .catch(err => { res.status(400).send("Unable to create user.") }); } }) app.get("/login", (req,res)=>{ reg.findOne({uname:req.body.uname, psw:req.body.psw}, function(err,user) { if(err) { res.send("User not found.") } res.send("Logged in succesfully.") } )}); app.listen(3000, function(){ console.log('Server started'); }); 
 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Page Title</title> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <form action="/register" method="POST"> <label for='uname'>Username:</label> <input type="text" placeholder="Enter Username" name="uname" required> <br> <label for="psw">Password:</label> <input type="text" placeholder="Enter Password" name="psw" required> <br><hr> <button type="submit" >Register</button> </form> <br> <br> <form action="/login" method="GET"> <label for='uname'>Username:</label> <input type="text" placeholder="Enter Username" name="uname" required> <br> <label for="psw">Password:</label> <input type="text" placeholder="Enter Password" name="psw" required> <br><hr> <button type="submit" >Login</button> </form> </body> </html> 

您应该检查user是否为null,找不到时不返回错误。

如果与数据库的连接崩溃,则findOne将仅返回错误,否则,如果未找到该用户,该user将为null因此您的检查必须为:

 if(err || !user) { // "if error or no user"
    res.send("User not found.")
 } else {
    res.send("logged in!");
 }

另外这:

 if(reg.findOne({uname:req.body.name})) {

将无法正常工作。 就像在登录部分一样传递回调。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM