防止 node.js 进程死于 MySQL 查询错误
Prevent node.js process from dying on MySQL query error
我有一个运行 MySQL 查询的 node.js 脚本。当此查询遇到错误时,node.js 进程终止。它使用 mysql-node 模块。
https://github.com/mysqljs/mysql
这是我的代码;
function runQuery() {
return new Promise(function (resolve, reject) {
try {
var connection = test_mysql.create_MySQL_conn();
var query_str =
//MySQL query. blah blah
;
var query_param = [];
connection.query(query_str, query_param, function (err, rows, fields) {
if (err) {
console.log(err);
return reject(err);
}
else {
resolve(rows);
}
});
}
catch (err) {
reject(err);
}
});
}
如何修改它,以便在 mysql 查询遇到错误时脚本不会死掉?
你提问的前提很可能是错误的。即使您在 MySQL 查询中遇到错误,脚本也可能不会死掉。你可以做个简单的测试。
您可以运行下面的代码。
function Delay(duration) {
return new Promise((resolve) => {
setTimeout(() => resolve(), duration);
});
}
function test_func() {
Promise.resolve()
.then(() => runQuery() );
}
Promise.resolve()
.then(() => Delay(3000))
.then(() => test_func() )
.then(() => Delay(3000))
.then(() => test_func() );
如果test_func()
运行s 2次,说明脚本没有死。可能,您遇到了一条很长的错误消息,并认为脚本已终止,但实际上并未终止。
我有一个运行 MySQL 查询的 node.js 脚本。当此查询遇到错误时,node.js 进程终止。它使用 mysql-node 模块。 https://github.com/mysqljs/mysql
这是我的代码;
function runQuery() {
return new Promise(function (resolve, reject) {
try {
var connection = test_mysql.create_MySQL_conn();
var query_str =
//MySQL query. blah blah
;
var query_param = [];
connection.query(query_str, query_param, function (err, rows, fields) {
if (err) {
console.log(err);
return reject(err);
}
else {
resolve(rows);
}
});
}
catch (err) {
reject(err);
}
});
}
如何修改它,以便在 mysql 查询遇到错误时脚本不会死掉?
你提问的前提很可能是错误的。即使您在 MySQL 查询中遇到错误,脚本也可能不会死掉。你可以做个简单的测试。
您可以运行下面的代码。
function Delay(duration) {
return new Promise((resolve) => {
setTimeout(() => resolve(), duration);
});
}
function test_func() {
Promise.resolve()
.then(() => runQuery() );
}
Promise.resolve()
.then(() => Delay(3000))
.then(() => test_func() )
.then(() => Delay(3000))
.then(() => test_func() );
如果test_func()
运行s 2次,说明脚本没有死。可能,您遇到了一条很长的错误消息,并认为脚本已终止,但实际上并未终止。