使用nodejs处理mysql连接

时间:2018-08-08 18:11:11

标签: javascript mysql node.js

我正在尝试建立一个用于连接MySQL的函数,以便其他函数可以调用它并获得连接。这是我基于文档的代码:

function connect_to_mysql(){
    var con = mysql.createConnection({
        host: "localhost",
        user: "roots",
        password: "",
        database: "mydb"
    });



    con.connect(function(err) {
        if (err)
        {
            throw err;
        }

    });

    return con ;

}

function do_stuff () {
    connection = connect_to_mysql();
    console.log('--------------------------------------------------');
    console.log('ALL OK ## ');
    return ;
}

这是问题所在:假设连接出现错误。我在终端中得到此输出:

--------------------------------------------------
ALL OK ##
D:\wamp\www\pop\node_modules\mysql\lib\protocol\Parser.js:80
        throw err; // Rethrow non-MySQL errors
        ^

基本上,代码继续运行,在抛出错误之前我得到了ALL OK ##

如果连接失败,我想中止代码....简而言之,如果连接失败,我希望connect_to_mysql返回false,所以我可以中止该过程。

3 个答案:

答案 0 :(得分:2)

这里的问题是connect函数是异步的,这就是为什么它会收到回调的原因:

con.connect(function(err) {
    if (err)
    {
        throw err;
    }
});

运行do_stuff时,console.log('--------------------------------------------------'); console.log('ALL OK ## ');function(err) { if (err) { throw err; } }同时运行。

我建议更改您的connect_to_mysql函数以接收将在建立连接后调用的回调:

function connect_to_mysql( callback ){
    var con = mysql.createConnection({
        host: "localhost",
        user: "roots",
        password: "",
        database: "mydb"
    });

    con.connect(function(err) {
        if (err){
            throw err;
        } else {
            callback(con);
        }

    });
}

然后您可以执行以下操作:

connect_to_mysql( conn => {
    console.log("all ok");
    // run queries ...
});

如果连接失败,您的回调函数也可以处理错误:

function connect_to_mysql( callback ){
    var con = mysql.createConnection({
        host: "localhost",
        user: "roots",
        password: "",
        database: "mydb"
    });

    con.connect(callback);
}


connect_to_mysql( function(err,conn) {
    if(err) { //abort };

    console.log("all ok");
    // run queries ...
});

希望这会有所帮助

答案 1 :(得分:0)

如果您想实际显示错误,则应该document.add_picture('foo.png')

我认为console.log(err);的主要用途是停止脚本,因为我使用throw err;而不是console.log(err)进行了测试,并且显示了错误,但程序仍在运行。

答案 2 :(得分:0)

您可以执行以下操作:

function connect_to_mysql(callback) {
    var con = mysql.createConnection({
        host: "localhost",
        user: "roots",
        password: "",
        database: "mydb"
    });
    con.connect(function(err) {
        if (err) {
            callback(err);
        } else {
            callback(null, con);
        }
    });
}

function do_stuff() {
    connect_to_mysql(function(err, connection) {
        if (err) {
            //abort
        } else {
            console.log('--------------------------------------------------');
            console.log('ALL OK ## ');
            return;
        }
    });
}