Я пытаюсь настроить функцию для подключения к 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
, если не удается установить соединение, так что я могу прервать процесс.
Проблема здесь в том, что функция 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 ...
});
Надеюсь это поможет
Вы можете сделать что-то вроде этого:
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;
}
});
}
Если вы хотите фактически отобразить ошибку, вы должны сделать console.log(err);
Я думаю, что основное использование throw err;
это остановить скрипт, так как я проверил тест с console.log(err)
но не throw err;
и отобразилась ошибка, но программа продолжала работать.
roots
или вы пытаетесь использовать корневую учетную запись?