Node js + mysql2:我应该检查 connection.on('error', fn1) 和 connection.connect(fn2) 中的错误,还是这些检查之一就足够了?

问题描述

我当前的代码是:

const MysqL = require('MysqL2');
function createConnection() {
return new Promise((res,rej) => {
    let connection = MysqL.createConnection({
        host: "127.0.0.1",port: "3306",user: "root",database: "UniversityEmployeesDB",password: ""
    });
    connection.on('error',function (err) {
        console.log(`Error while creating a MysqL connection: ${err.toString()}`);
        rej(err);
    });
    connection.connect(function (err) {
        if (err) {
            console.log(`Error while connecting to MysqL server: ${err.toString()}`);
            rej(err);
        }
        else {
            console.log("Connection with the MysqL server was successfully established.");
            res(connection);
        }
    });
});
}

我在错误情况下对其进行了测试,关闭了我的本地 MysqL 服务器并设置了错误的访问登录名和/或密码,并且服务器控制台日志显示 onerror 事件和 connection.connect 触发错误显示完全相同的结果。所以我认为只使用其中一种是合理的,同时使用两者可能是多余的......但我仍然怀疑如果我省略一种,不是所有的错误类型都可以处理。还是真的多余?

解决方法

我建议在正常连接上使用 poolConnection。 我正在使用带有 mysql2nodejs-express 的基于 MVC 的架构。

以下是创建用于建立数据库连接的 connector.js 文件的方法。

// connector.js

const mysql = require('mysql2');
var connection = mysql.createPool({
    host: process.env.HOST,// port: 3306,user: process.env.DB_USERNAME,password: process.env.DB_PASSWORD,database: process.env.DB_NAME,connectionLimit: 10,multipleStatements: true
});
connection.getConnection((err) => {
    if (err) console.log(JSON.stringify(err));
    else {
        console.log('Connected!')
    }
});
module.exports = connection.promise();

并在 con.query 上使用此方法执行查询

const con = require('../database/connector.js');

const fn = async ( params ) => {
  try{
     const [data] = await con.execute('select * from tbl_users where user = ?',[params]);
     return data;
  } catch(err) {
     return false;
  }
}