节点 mysql2 async-await try catch
Node mysql2 async-await try catch
我的问题是关于在 Nodejs 中处理异步等待 mysql 查询中的错误。我正在使用 mysql promise wrapper 在 nodejs 中创建连接池。
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: '192.168.0.1',
user: 'root',
database: 'h2biz_18_dev',
waitForConnections: true,
connectionLimit: 100,
queueLimit: 0,
password : 'abc'
})
无法调用内部 catch 块连接释放,因为抛出错误说
Cannot read property 'release' of undefined
如果查询执行抛出错误,是否需要释放catch块中的连接?如果是这样的话,什么是释放连接并捕获异步等待中的错误的正确方法 mysql2?
router.post('/getHolidaysOfYear',async function (req, res, next) {
var conn;
try{
conn = await pool.getConnection();
// Do something with the connection
var promise1 = conn.execute(`
SELECT
CALENDAR.*
FROM
hrm_calendar_holiday_policy1 CALENDAR
`);
const values = await Promise.all([promise1]);
conn.release();
return res.status(200).send({success:true, data:values[0][0]});
}
catch(err){
logger.error(API_NAME + 'error :' + err);
conn.release();
return res.status(500).send({success:false, message:'Query Error'});
}
});
看起来甚至在 conn
初始化之前就发生了错误,因此在 pool.getConnection();
.
中
因此在您的 catch 块中,变量 conn
为空,因此不能/不必释放它。
你可以这样做:
catch(err){
logger.error(API_NAME + 'error :' + err);
if(conn !== undefined) //This will check if the conn has already be initialized
conn.release();
return res.status(500).send({success:false, message:'Query Error'});
}
我的问题是关于在 Nodejs 中处理异步等待 mysql 查询中的错误。我正在使用 mysql promise wrapper 在 nodejs 中创建连接池。
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: '192.168.0.1',
user: 'root',
database: 'h2biz_18_dev',
waitForConnections: true,
connectionLimit: 100,
queueLimit: 0,
password : 'abc'
})
无法调用内部 catch 块连接释放,因为抛出错误说
Cannot read property 'release' of undefined
如果查询执行抛出错误,是否需要释放catch块中的连接?如果是这样的话,什么是释放连接并捕获异步等待中的错误的正确方法 mysql2?
router.post('/getHolidaysOfYear',async function (req, res, next) {
var conn;
try{
conn = await pool.getConnection();
// Do something with the connection
var promise1 = conn.execute(`
SELECT
CALENDAR.*
FROM
hrm_calendar_holiday_policy1 CALENDAR
`);
const values = await Promise.all([promise1]);
conn.release();
return res.status(200).send({success:true, data:values[0][0]});
}
catch(err){
logger.error(API_NAME + 'error :' + err);
conn.release();
return res.status(500).send({success:false, message:'Query Error'});
}
});
看起来甚至在 conn
初始化之前就发生了错误,因此在 pool.getConnection();
.
因此在您的 catch 块中,变量 conn
为空,因此不能/不必释放它。
你可以这样做:
catch(err){
logger.error(API_NAME + 'error :' + err);
if(conn !== undefined) //This will check if the conn has already be initialized
conn.release();
return res.status(500).send({success:false, message:'Query Error'});
}