sql >> Databasteknik >  >> RDS >> Mysql

varför får detta mysql-fel att nodejs kraschar istället för att gå till catch-funktionen?

Faktum är att @Quentine var nära det rätta...

Det är "en sorts" en bugg i mysql2 ,jag använder sorts eftersom https://github.com/sidorares/node- mysql2/issues/902 föreslår utvecklingsteamet för mysql2 är o.k. med den.

det är ett problem med hur mysql2.pool skickar anropet till den skapade anslutningen, vilket inte skickar undantaget från omslutningslöftet.

Det slutade med att jag skapade min egen omslutningsfunktion för att skapa anslutningen + samtalsexekvering insvept i korrekt löfteshantering.

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);                
            });
        });
    }


  1. PG::ForeignKeyViolation:FEL:uppdatera eller ta bort på tabell xxx bryter mot begränsningen för främmande nyckel

  2. Jämföra datum i MySQL och ignorera tidsdelen av ett DateTime-fält

  3. Skapa mysql-databas och användare i bash-skript

  4. Plattare barn-/förälderdata med okänt antal kolumner