news 2026/4/3 6:08:27

【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/3/23 14:38:10

0基础能不能转行做网络安全?网络安全人才发展路线

0基础能不能转行做网络安全?网络安全人才发展路线 最近有同学在后台留言,0基础怎么学网络安全?0基础可以转行做网络安全吗?以前也碰到过类似的问题,想了想,今天简单写一下。 我的回答是先了解,…

作者头像 李华
网站建设 2026/4/2 6:29:53

LSTM仍值得学?传统RNN在特定语音任务中仍有优势

LSTM仍值得学?传统RNN在特定语音任务中仍有优势 🎯 问题背景:当Transformer成为主流,LSTM是否已被淘汰? 近年来,随着Transformer架构在自然语言处理和语音合成领域的全面普及,以LSTM为代表的传统…

作者头像 李华
网站建设 2026/3/29 15:48:14

零基础玩转微服务:30分钟搭建第一个微服务

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个最简微服务教学项目,要求:1. 只包含2个服务(用户服务和消息服务) 2. 使用通俗注释解释每个组件作用 3. 提供step by step的…

作者头像 李华
网站建设 2026/4/2 17:47:20

零基础部署CRNN OCR模型:从镜像启动到文字识别的完整指南

零基础部署CRNN OCR模型:从镜像启动到文字识别的完整指南 📖 项目简介 OCR(Optical Character Recognition,光学字符识别)是人工智能在视觉领域的重要应用之一,广泛应用于文档数字化、票据识别、车牌读取…

作者头像 李华
网站建设 2026/3/25 15:43:27

从微调到量产:基于Llama Factory的模型蒸馏与小型化工业部署

从微调到量产:基于Llama Factory的模型蒸馏与小型化工业部署 在工业物联网(IoT)场景中,我们经常遇到一个典型问题:在云端微调好的大语言模型(LLM)无法直接部署到边缘设备上运行。本文将介绍如何利用Llama Factory框架,实现从模型微…

作者头像 李华
网站建设 2026/4/2 23:30:31

语音合成GPU不兼容?Sambert-Hifigan专注CPU优化,部署更灵活

语音合成GPU不兼容?Sambert-Hifigan专注CPU优化,部署更灵活 📌 背景与痛点:中文多情感语音合成的现实挑战 在智能客服、有声阅读、虚拟主播等应用场景中,高质量的中文多情感语音合成(Text-to-Speech, TTS&a…

作者头像 李华