简体   繁体   中英

Check if a user already exists (Node.js and mysql)

I'm trying to check if a user in the database also exists. My code works if I add a user to the db without checking if someone with it's name exists. The problem appears when I try to check it, because the code can recognize if a user exists or not, but the user cannot be added to the database if this doesn't exist. The code which works is this one (the function DB() is where the code creates the connection with the database):

app.post('/Registro', function(req, res){
var conDB=DB();
var reg={
    Usuario: req.body.Usuario,
    Contra: req.body.Contra
};
console.log(req.body.Usuario+" "+req.body.Contra);
var query=conDB.query('INSERT INTO Usuario SET ?',reg,function(err, res){

});
res.send("Usuario: "+req.body.Usuario+" y Contraseña: "+req.body.Contra + "REGISTRADOS");
conDB.end(); });

The code which doesn't work (where I'm trying to check if the user exists) is this one:

app.post('/Registro', function(req, res){
var conDB=DB();
var reg={
    Usuario: req.body.Usuario,
    Contra: req.body.Contra
};
var UsuarioReg=req.body.Usuario;
conDB.query('SELECT * FROM Usuario WHERE Usuario = ?', UsuarioReg,function(err,rows){
    if(err)
        return console.log(err);
    if (!rows.length)
    {
            conDB.query('INSERT INTO Usuario SET ?',reg,function(err, respuesta){
            return respuesta.send("Usuario: "+req.body.Usuario+" y Contraseña: "+
                    req.body.Contra + "REGISTRADOS");
            }); 
    }
    else
    {
        return res.send("Este usuario ya existe");
    }
});
    conDB.end(); 
});

If someone knows how can I solve this situation, I'd be grateful!

I have made an edition which threw this exception:

在此处输入图片说明

I bet the database connection is closing before the queries get executed. I'd move conDB.end() into the err handler from the first query and into the callback function of the second query.

EDIT:

app.post('/Registro', function(req, res){
    var conDB=DB();
    var reg={
        Usuario: req.body.Usuario,
        Contra: req.body.Contra
    };
    var UsuarioReg=req.body.Usuario;
    var ContraReg=req.body.Contra;
    conDB.query('SELECT * FROM Usuario WHERE Usuario = ? and Contra= ?',  [UsuarioReg,ContraReg]
,function(err,rows){
    if(err) {
        conDB.end();
        return console.log(err);
    }

    if (!rows.length)
    {
        conDB.query('INSERT INTO Usuario SET ?',reg,function(err, results){
            conDB.end();
            return res.send("Usuario: "+req.body.Usuario+" y Contraseña: "+
                req.body.Contra + "REGISTRADOS");
        });
    }
    else
    {
        conDB.end();
        return res.send("Este usuario ya existe");
    }
});

});

Thank for your idea. It is help for me. Then I can make route for sign up in my code.

            var express = require("express");
            var router = express.Router();
            //var usersModel = require("../models/users");
            var db = require("../common/database");
            var conn = db.getConnection();
            router.get("/", function (req, res) {
                res.json({ "message": "This is Admin page" });
            })
            router.get("/register_success/:email", function (req, res) {
                res.render("register_success", { email: req.params.email });
            })
            router.get("/signup", function (req, res) {
                res.render("signup", {
                    data: {
                        email: "",
                        password: "",
                        first_name: "",
                        last_name: ""
                    }, error: false, message: ""
                });
            })
            router.post('/signup', function (req, res) {
                var user = req.body;
                var Oneuser = {
                    email: user.email,
                    password: user.passwd,
                    first_name: user.firstname,
                    last_name: user.lastname,
                    created_at: new Date()
                };
                conn.query('SELECT * FROM users WHERE email = ?', [Oneuser.email]
                    , function (err, rows) {
                        if (err) {
                            conn.end();
                            console.log(err);
                            res.render("signup", {
                                data: {
                                    email: user.email,
                                    password: user.passwd,
                                    first_name: user.firstname,
                                    last_name: user.lastname
                                }, error: true, message: err
                            });
                        }
                        if (!rows.length) {
                            conn.query('INSERT INTO users SET ?', Oneuser, function (err2, results) {
                                if (err2) {
                                    console.log(err2);
                                    res.render("signup", {
                                        data: {
                                            email: user.email,
                                            password: user.passwd,
                                            first_name: user.firstname,
                                            last_name: user.lastname
                                        }, error: true, message: err2
                                    });
                                } else {
                                    res.redirect("/admin/register_success/" + Oneuser.email);
                                }
                            });
                        }
                        else {
                            console.log("Email is exists");
                            res.render("signup", {
                                data: {
                                    email: user.email,
                                    password: user.passwd,
                                    first_name: user.firstname,
                                    last_name: user.lastname
                                }, error: true, message: "Email is exists"
                            });
                        }
                    });
            });
            module.exports = router;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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