我已经阅读了一些在node.js中使用mysql的示例,并且对错误处理有疑问。
大多数示例都进行如下错误处理(为简便起见):
app.get('/countries', function(req, res) {
pool.createConnection(function(err, connection) {
if (err) { throw err; }
connection.query(sql, function(err, results) {
if (err) { throw err; }
connection.release();
// do something with results
});
});
});
每次发生sql错误时,这都会导致服务器崩溃。我想避免这种情况并保持服务器运行。
我的代码是这样的:
app.get('/countries', function(req, res) {
pool.createConnection(function(err, connection) {
if (err) {
console.log(err);
res.send({ success: false, message: 'database error', error: err });
return;
}
connection.on('error', function(err) {
console.log(err);
res.send({ success: false, message: 'database error', error: err });
return;
});
connection.query(sql, function(err, results) {
if (err) {
console.log(err);
res.send({ success: false, message: 'query error', error: err });
return;
}
connection.release();
// do something with results
});
});
});
我不确定这是否是处理它的最佳方法。我也想知道connection.release()查询的err块中是否应该有一个。否则,连接可能会保持打开状态并随着时间的推移逐渐建立。
我习惯了Java try...catch...finally或try-with-
resources在这里可以“干净地”捕获任何错误并在最后关闭我的所有资源。有没有一种方法可以传播错误并在一处处理所有错误?