【问题标题】:Check if a user already exists (Node.js and mysql)检查用户是否已经存在(Node.js 和 mysql)
【发布时间】:2016-12-28 23:30:55
【问题描述】:

我正在尝试检查数据库中的用户是否也存在。如果我将用户添加到数据库而不检查是否存在同名的人,我的代码就可以工作。当我尝试检查它时会出现问题,因为代码可以识别用户是否存在,但是如果不存在,则无法将用户添加到数据库中。有效的代码是这个(函数 DB() 是代码创建与数据库的连接的地方):

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(); });

不起作用的代码(我试图检查用户是否存在)是这个:

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(); 
});

如果有人知道我该如何解决这种情况,我将不胜感激!

我制作了一个抛出此异常的版本:

【问题讨论】:

    标签: javascript mysql node.js


    【解决方案1】:

    我敢打赌,在查询执行之前数据库连接正在关闭。我会将conDB.end() 从第一个查询移到err 处理程序中,然后移到第二个查询的回调函数中。

    编辑:

    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");
        }
    });
    
    });
    

    【讨论】:

    • 我已经更改了代码,但它仍然不起作用。我所做的是去掉了 return res.send("Usuario: "+req.body.Usuario+" y Contraseña: "+req.body.Contra + "REGISTRADOS");从将用户添加到数据库的函数中。该功能一定有问题。不关闭Node.js中的连接,我不能向数据库询问两次吗??
    • 你绝对可以。您是否从控制台中的第一个查询中看到错误?还是您收到了user already exists 的回复?
    • 当用户已经存在时,它会向我抛出一条消息,说它存在。但是现在,像第一种情况一样,返回函数运行良好,它不会引发错误。它只是说新用户已注册,但是当我打开数据库时,它没有出现
    • 我刚刚看到的另一个问题:尝试插入回调函数后,您将res 作为第二个参数。您正在尝试使用 res 发送 http 响应,但您正在覆盖该变量,因此 res 不是此时的 HTTP 响应
    • 你说我在开销的变量是什么?当我在 req.body.Usuario 和 req.body.Contra 等地方使用函数 res.send 时,你可以看到一次?
    【解决方案2】:

    感谢您的想法。这对我有帮助。然后我可以在我的代码中注册路由。

                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;
    

    【讨论】:

      猜你喜欢
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      相关资源
      最近更新 更多