Mysql
 sql >> Database >  >> RDS >> Mysql

perché questo errore mysql causa l'arresto anomalo di nodejs invece di andare alla funzione catch?

In realtà, @Quentine era vicino alla cosa giusta...

È "una specie" di un bug in mysql2 , io uso una sorta di perché https://github.com/sidorares/node- mysql2/issues/902 suggerisce il team di sviluppo di mysql2 va bene con esso.

è un problema con il modo in cui mysql2.pool passa la chiamata alla connessione creata, che non passa l'eccezione alla promessa di wrapping.

Ho finito per creare la mia funzione di wrapping per creare la connessione + eseguire la chiamata avvolta nella corretta gestione delle promesse.

import mysql = require('mysql2');
private async queryDB(query:string, useExecute: boolean = false, ...args:any[]) : Promise<any[]>
    {
        return new Promise<any[]>((resolve, reject)=>{
            for(var i = 0; i < args.length; ++i)
            {
                if(args[i]===undefined)
                    args[i] = null;
            }
            this.dbPool.getConnection((err, conn)=>{
                if(err){
                    reject(err);
                    return;
                }
                
                let cb = function(err: mysql.QueryError, results: any[], fields: mysql.FieldPacket[]) {
                    conn.release();
                    if(err)
                    {
                        reject(err);
                        return;
                    }
                    resolve(results);
                }
                if(useExecute)
                    conn.execute(query, args, cb);
                else
                    conn.query(query, args, cb);                
            });
        });
    }