sql >> データベース >  >> RDS >> Mysql

このmysqlエラーにより、catch関数に移動する代わりにnodejsがクラッシュするのはなぜですか?

    実際、@Quentineは正しいものに近かった...

    これは、mysql2の「一種の」バグです。 、 https://github.com/sidorares/node-のため、並べ替えを使用しますmysql2 / issues / 902 mysql2の開発チームを提案します 大丈夫ですそれで。

    これは、mysql2.poolが作成された接続に呼び出しを渡す方法の問題であり、ラッピングの約束に例外を渡しません。

    最終的に、適切なPromise処理でラップされた接続と呼び出しの実行を作成するための独自のラッピング関数を作成しました。

    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. SQLSTATE [23000]:整合性制約違反のエラー処理

    2. MysqlComplexWhere句

    3. SQL Serverでfloatからvarcharへのキャストが丸められるのはなぜですか?

    4. MySQLiプリペアドステートメントをループで使用する場合、いつbind_paramを呼び出しますか?