Узел mysql2 async-await try catch - PullRequest
0 голосов
/ 09 октября 2018

Мой вопрос касается обработки ошибок в асинхронных запросах mysql в Nodejs.Я использую оболочку обещаний mysql для создания пула соединений в 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'});
}
});

1 Ответ

0 голосов
/ 09 октября 2018

Похоже, что Ошибка возникает даже до инициализации 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'});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...