node.js判断连接池是否正确连接上的两种方法

 更新时间:2026年01月10日 09:28:53   作者:亮子AI  
在使用mysql2/promise的createPool时,连接是懒加载的,只有在执行查询或手动获取连接时才会尝试建立,推荐手动获取并释放一个连接或执行一个简单的测试查询来判断连接是否正确,本文给大家介绍node.js判断连接池是否正确连接上的两种方法,感兴趣的朋友跟随小编一起看看吧

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

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

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

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

import mysql from 'mysql2/promise';
async function checkConnection() {
    let pool = 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 {
        // 尝试获取一个连接
        const connection = await pool.getConnection();
        console.log('数据库连接成功!');
        // 释放连接回连接池
        connection.release();
        return pool;
    } catch (err) {
        // 判断错误类型
        if (err.code === 'ER_BAD_DB_ERROR') {
            console.error('错误:数据库不存在!');
        } else if (err.code === 'ER_ACCESS_DENIED_ERROR') {
            console.error('错误:用户名或密码错误!');
        } else if (err.code === 'ECONNREFUSED') {
            console.error('错误:无法连接到数据库服务器(IP或端口错误)!');
        } else {
            console.error('连接失败,错误代码:' + err.code);
            console.error(err.message);
        }
        return null;
    }
}
const myPool = await checkConnection();

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

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

try {
    // 这种方式也会触发一次连接请求
    await pool.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. 先不指定数据库连接到服务器
const poolWithoutDB = mysql.createPool({
    host: configData.db_host,
    user: configData.db_user,
    password: configData.db_password
});
// 2. 执行创建命令
await poolWithoutDB.query(`CREATE DATABASE IF NOT EXISTS \`${configData.db_database}\``);
// 3. 此时再关闭这个 pool,或者直接切换到目标数据库使用
await poolWithoutDB.end();
// 4. 然后创建正式带数据库名的 pool
const pool = mysql.createPool({ ...configData });

总结

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

到此这篇关于node.js判断连接池是否正确连接上的两种方法的文章就介绍到这了,更多相关node.js判断连接池是否正确连接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析Node.js中使用依赖注入的相关问题及解决方法

    浅析Node.js中使用依赖注入的相关问题及解决方法

    这篇文章主要介绍了浅析Node.js中使用依赖注入的相关问题及解决方法,Node.js是一个将JavaScript应用运行于服务器端的框架,需要的朋友可以参考下
    2015-06-06
  • Node.js本地文件操作之文件拷贝与目录遍历的方法

    Node.js本地文件操作之文件拷贝与目录遍历的方法

    这篇文章主要介绍了Node.js本地文件操作之文件拷贝与目录遍历的方法,拷贝用到了Node的文件API,遍历则举了一个异步API实现的形式(Node的一大特点),需要的朋友可以参考下
    2016-02-02
  • NodeJS父进程与子进程资源共享原理与实现方法

    NodeJS父进程与子进程资源共享原理与实现方法

    这篇文章主要介绍了NodeJS父进程与子进程资源共享原理与实现方法,结合实例形式分析了nodejs基于cluster模块实现父进程与子进程资源共享的相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • 浅析Node.js:DNS模块的使用

    浅析Node.js:DNS模块的使用

    本篇文章主要介绍了Node.js:DNS模块的使用,DNS模块包涵有关DNS查询和操作的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-11-11
  • 详解Node.js如何处理ES6模块

    详解Node.js如何处理ES6模块

    学习JavaScript语言,你会发现它有两种格式的模块。一种是ES6模块,简称ESM;另一种是Node.js专用的CommonJS模块,简称 CJS。这两种模块不兼容。很多人使用Node.js,只会用require()加载模块,遇到ES6模块就不知道该怎么办。本文就来谈谈ES6模块在Node.js里面怎么使用。
    2021-05-05
  • Node.js之http模块的用法

    Node.js之http模块的用法

    这篇文章主要介绍了Node.js之http模块的用法,对Node.js感兴趣的同学,可以参考下
    2021-04-04
  • 浅谈Koa服务限流方法实践

    浅谈Koa服务限流方法实践

    本篇文章主要介绍了浅谈Koa服务限流方法实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 一行命令搞定node.js 版本升级

    一行命令搞定node.js 版本升级

    今天,又发现一个超级简单的升级node.js的方法。一行命令搞定,省去了重新编译安装的过程。
    2014-07-07
  • nodejs微信开发之授权登录+获取用户信息

    nodejs微信开发之授权登录+获取用户信息

    这篇文章主要介绍了nodejs微信开发之授权登录+获取用户信息,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • 轻松开发 Streamable HTTP MCP Server

    轻松开发 Streamable HTTP MCP Server

    本文介绍了MCP协议中stdio和SSE协议的优缺点,以及MCP的最新协议StreamableHTTP的特性,韩老师还分享了如何使用YeomanGeneratorforMCPServer快速开发一个支持StreamableHTTP的MCPServer,并在VSCode中进行调试
    2025-05-05

最新评论