当前位置: 首页 > news >正文

【MySQL】node.js 如何判断连接池是否正确连接上了?

在使用mysql2/promisecreatePool时,仅仅调用createPool是不会立即去连接数据库的。它是“懒加载”的,只有在执行第一次查询或者手动请求连接时,才会真正尝试建立连接。

要判断连接是否正确以及数据库是否存在,推荐以下两种方式:

方法一:手动获取并释放一个连接(推荐)

这是最标准的方法。通过调用pool.getConnection(),你可以触发一次真实的连接尝试。

importmysqlfrom'mysql2/promise';asyncfunctioncheckConnection(){letpool=mysql.createPool({host:configData.db_host,user:configData.db_user,database:configData.db_database,password:configData.db_password,waitForConnections:true,connectionLimit:10,queueLimit:0});try{// 尝试获取一个连接constconnection=awaitpool.getConnection();console.log('数据库连接成功!');// 释放连接回连接池connection.release();returnpool;}catch(err){// 判断错误类型if(err.code==='ER_BAD_DB_ERROR'){console.error('错误:数据库不存在!');}elseif(err.code==='ER_ACCESS_DENIED_ERROR'){console.error('错误:用户名或密码错误!');}elseif(err.code==='ECONNREFUSED'){console.error('错误:无法连接到数据库服务器(IP或端口错误)!');}else{console.error('连接失败,错误代码:'+err.code);console.error(err.message);}returnnull;}}constmyPool=awaitcheckConnection();

方法二:执行一个简单的测试查询

如果你不想手动获取连接,可以直接执行一个极简查询(如SELECT 1)。

try{// 这种方式也会触发一次连接请求awaitpool.query('SELECT 1');console.log('数据库连接验证通过');}catch(err){if(err.code==='ER_BAD_DB_ERROR'){console.error('数据库不存在');}else{console.error('连接失败:',err.message);}}

如何识别“数据库不存在”?

catch块中,你可以通过检查err.code属性来识别具体的错误:

  • ER_BAD_DB_ERROR(错误代码: 1049): 表示你指定的database在服务器上不存在。
  • ER_ACCESS_DENIED_ERROR(错误代码: 1045): 表示用户名或密码不对。
  • ENOTFOUND/EAI_AGAIN: 表示host地址解析失败。
  • ECONNREFUSED: 表示数据库服务没启动,或者端口号填错了。

进阶:如果数据库不存在,自动创建它

有时你希望程序启动时如果发现数据库不存在,就自动创建一个。这时候你创建 Pool 时不能指定 database,连接成功后再创建:

// 1. 先不指定数据库连接到服务器constpoolWithoutDB=mysql.createPool({host:configData.db_host,user:configData.db_user,password:configData.db_password});// 2. 执行创建命令awaitpoolWithoutDB.query(`CREATE DATABASE IF NOT EXISTS \`${configData.db_database}\``);// 3. 此时再关闭这个 pool,或者直接切换到目标数据库使用awaitpoolWithoutDB.end();// 4. 然后创建正式带数据库名的 poolconstpool=mysql.createPool({...configData});

总结

要判断连接情况,请在初始化后立刻执行一次await pool.getConnection(),并捕获err.code === 'ER_BAD_DB_ERROR'来识别数据库不存在的情况。

http://www.jsqmd.com/news/220068/

相关文章:

  • 大模型的技术生态——怎么理解大模型技术以及应用技术
  • 网络安全攻防秘籍,从零基础到精通,收藏这篇就够了!
  • JAVA新手必看:找不到符号错误详解
  • 无需专业设备:普通电脑运行CRNN OCR的秘诀
  • NodePad++编辑完文本怎么转语音?拖入WebUI一键合成WAV文件
  • 稀有符号在社交媒体中的创意应用
  • 1小时搞定AI聊天机器人:pip install+快马快速开发
  • CRNN OCR在医疗检验报告自动录入中的应用
  • 如何用AI快速搭建Kafka开发环境?
  • CRNN OCR模型训练指南:自定义数据集的fine-tuning
  • 基于CRNN OCR的竖排文字识别解决方案
  • 中小学听力材料制作:Sambert-Hifigan批量生成标准化音频
  • Python多线程在电商价格监控中的实战应用
  • OCR识别质量评估:CRNN模型效果分析
  • Visual Studio 2019在企业级项目中的实战应用
  • 传统开发vsAI生成:1024网站效率对比实验
  • 网络安全学习全攻略:从 0 到高手的必由之路,附:学习路径 + 工具包
  • 教育机器人语音系统:Sambert-Hifigan支持儿童故事多角色演绎
  • CRNN OCR在电商行业的应用:商品标签自动识别系统
  • 白帽黑客亲述:网络安全是学什么?为什么选它?钱景如何?
  • AI如何简化Docker Compose部署:从命令到容器编排
  • 智能物流系统:CRNN OCR在运单识别
  • 小白也能懂:用Llama Factory轻松搭建大模型训练环境
  • OCR系统日志分析:监控CRNN服务健康状况
  • 从Demo到上线:Sambert-Hifigan生产环境部署 checklist 清单
  • 一键体验Llama Factory微调:无需安装的在线教程
  • 一键体验Llama Factory微调:无需安装的在线教程
  • 树状数组VS线段树:性能对比与选择指南
  • 树状数组VS线段树:性能对比与选择指南
  • CRNN OCR在文物保护中的应用:古籍碑文数字化系统