我正在尝试建立一个用于连接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
,所以我可以中止该过程。
答案 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;
}
});
}