news 2026/1/13 8:33:05

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【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'来识别数据库不存在的情况。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/11 22:40:10

1小时搞定AI聊天机器人:pip install+快马快速开发

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 构建一个基于Transformer的聊天机器人原型,要求:1. 自动生成包含pytorch、transformers等依赖的requirements.txt 2. 提供基础对话实现和API封装示例 3. 支…

作者头像 李华
网站建设 2026/1/11 6:13:50

5分钟搭建PYTHON装饰器原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 快速创建一个PYTHON装饰器概念验证原型,展示核心功能和用户体验。点击项目生成按钮,等待项目生成完整后预览效果 今天想和大家分享一个快速验证Python装饰器…

作者头像 李华
网站建设 2026/1/12 11:11:10

CHROMA入门指南:5分钟搭建你的第一个向量数据库

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个CHROMA向量数据库的入门教程项目,包含:1. 本地安装和云部署指南;2. 基本的CRUD操作示例;3. 简单的文本相似度搜索demo&…

作者头像 李华
网站建设 2026/1/13 0:04:44

AI帮你选型TVS管:智能推荐与参数分析

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个TVS管智能选型工具,要求:1. 支持输入工作电压、峰值脉冲功率、钳位电压等关键参数 2. 内置主流厂商(TVS管)型号数据库 3. 提供参数对比和推荐功能 …

作者头像 李华
网站建设 2026/1/13 2:41:18

Mamba架构优势实测:长文本TTS生成速度提升验证

Mamba架构优势实测:长文本TTS生成速度提升验证 📌 引言:中文多情感语音合成的现实挑战 随着智能客服、有声读物、虚拟主播等应用场景的普及,高质量的中文多情感语音合成(Text-to-Speech, TTS) 需求日益增长…

作者头像 李华
网站建设 2026/1/11 2:09:51

比手动操作快10倍的Git冲突解决技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个Git工作流优化工具,专门处理分支落后问题。功能包括:1) 一键式解决方案选择面板;2) 命令执行时间对比(传统方式vs本工具);3…

作者头像 李华