обработка mysql-соединения с nodejs

0

Я пытаюсь настроить функцию для подключения к 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 ## перед выбросом err

Я хочу, чтобы отменить код, если не удается установить соединение.... поставить его очень просто хочу connect_to_mysql вернуться false, если не удается установить соединение, так что я могу прервать процесс.

  • 0
    Вы используете учетную запись , называются roots или вы пытаетесь использовать корневую учетную запись?
  • 0
    @awesomeguy его учетная запись root я пытаюсь сгенерировать ошибку, поэтому я ставлю root вместо root

3 ответа

2
Лучший ответ

Проблема здесь в том, что функция connect async, поэтому она получает обратный вызов:

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

Когда вы запустите do_stuff, console.log('--------------------------------------------------'); console.log('ALL OK ## '); console.log('--------------------------------------------------'); console.log('ALL OK ## '); и function(err) { if (err) { throw err; } } 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 ...
});

Надеюсь это поможет

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

Если вы хотите фактически отобразить ошибку, вы должны сделать console.log(err);

Я думаю, что основное использование throw err; это остановить скрипт, так как я проверил тест с console.log(err) но не throw err; и отобразилась ошибка, но программа продолжала работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню