Я прочитал несколько примеров использования mysql в node.js, и у меня есть вопросы об обработке ошибок.
В большинстве примеров такая обработка ошибок (возможно, для краткости):
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
, где я могу "чисто" уловить любые ошибки и закрыть все мои ресурсы в конце. Есть ли способ распространять ошибки и обрабатывать их все в одном месте?