最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node.js判斷連接池是否正確連接上的兩種方法

 更新時(shí)間:2026年01月10日 09:28:53   作者:亮子AI  
在使用mysql2/promise的createPool時(shí),連接是懶加載的,只有在執(zhí)行查詢或手動(dòng)獲取連接時(shí)才會(huì)嘗試建立,推薦手動(dòng)獲取并釋放一個(gè)連接或執(zhí)行一個(gè)簡(jiǎn)單的測(cè)試查詢來判斷連接是否正確,本文給大家介紹node.js判斷連接池是否正確連接上的兩種方法,感興趣的朋友跟隨小編一起看看吧

在使用 mysql2/promisecreatePool 時(shí),僅僅調(diào)用 createPool 是不會(huì)立即去連接數(shù)據(jù)庫(kù)的。它是“懶加載”的,只有在執(zhí)行第一次查詢或者手動(dòng)請(qǐng)求連接時(shí),才會(huì)真正嘗試建立連接。

要判斷連接是否正確以及數(shù)據(jù)庫(kù)是否存在,推薦以下兩種方式:

方法一:手動(dòng)獲取并釋放一個(gè)連接(推薦)

這是最標(biāo)準(zhǔn)的方法。通過調(diào)用 pool.getConnection(),你可以觸發(fā)一次真實(shí)的連接嘗試。

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 {
        // 嘗試獲取一個(gè)連接
        const connection = await pool.getConnection();
        console.log('數(shù)據(jù)庫(kù)連接成功!');
        // 釋放連接回連接池
        connection.release();
        return pool;
    } catch (err) {
        // 判斷錯(cuò)誤類型
        if (err.code === 'ER_BAD_DB_ERROR') {
            console.error('錯(cuò)誤:數(shù)據(jù)庫(kù)不存在!');
        } else if (err.code === 'ER_ACCESS_DENIED_ERROR') {
            console.error('錯(cuò)誤:用戶名或密碼錯(cuò)誤!');
        } else if (err.code === 'ECONNREFUSED') {
            console.error('錯(cuò)誤:無法連接到數(shù)據(jù)庫(kù)服務(wù)器(IP或端口錯(cuò)誤)!');
        } else {
            console.error('連接失敗,錯(cuò)誤代碼:' + err.code);
            console.error(err.message);
        }
        return null;
    }
}
const myPool = await checkConnection();

方法二:執(zhí)行一個(gè)簡(jiǎn)單的測(cè)試查詢

如果你不想手動(dòng)獲取連接,可以直接執(zhí)行一個(gè)極簡(jiǎn)查詢(如 SELECT 1)。

try {
    // 這種方式也會(huì)觸發(fā)一次連接請(qǐng)求
    await pool.query('SELECT 1');
    console.log('數(shù)據(jù)庫(kù)連接驗(yàn)證通過');
} catch (err) {
    if (err.code === 'ER_BAD_DB_ERROR') {
        console.error('數(shù)據(jù)庫(kù)不存在');
    } else {
        console.error('連接失敗:', err.message);
    }
}

如何識(shí)別“數(shù)據(jù)庫(kù)不存在”?

catch 塊中,你可以通過檢查 err.code 屬性來識(shí)別具體的錯(cuò)誤:

  • ER_BAD_DB_ERROR (錯(cuò)誤代碼: 1049): 表示你指定的 database 在服務(wù)器上不存在。
  • ER_ACCESS_DENIED_ERROR (錯(cuò)誤代碼: 1045): 表示用戶名或密碼不對(duì)。
  • ENOTFOUND / EAI_AGAIN: 表示 host 地址解析失敗。
  • ECONNREFUSED: 表示數(shù)據(jù)庫(kù)服務(wù)沒啟動(dòng),或者端口號(hào)填錯(cuò)了。

進(jìn)階:如果數(shù)據(jù)庫(kù)不存在,自動(dòng)創(chuàng)建它

有時(shí)你希望程序啟動(dòng)時(shí)如果發(fā)現(xiàn)數(shù)據(jù)庫(kù)不存在,就自動(dòng)創(chuàng)建一個(gè)。這時(shí)候你創(chuàng)建 Pool 時(shí)不能指定 database,連接成功后再創(chuàng)建:

// 1. 先不指定數(shù)據(jù)庫(kù)連接到服務(wù)器
const poolWithoutDB = mysql.createPool({
    host: configData.db_host,
    user: configData.db_user,
    password: configData.db_password
});
// 2. 執(zhí)行創(chuàng)建命令
await poolWithoutDB.query(`CREATE DATABASE IF NOT EXISTS \`${configData.db_database}\``);
// 3. 此時(shí)再關(guān)閉這個(gè) pool,或者直接切換到目標(biāo)數(shù)據(jù)庫(kù)使用
await poolWithoutDB.end();
// 4. 然后創(chuàng)建正式帶數(shù)據(jù)庫(kù)名的 pool
const pool = mysql.createPool({ ...configData });

總結(jié)

要判斷連接情況,請(qǐng)?jiān)诔跏蓟罅⒖虉?zhí)行一次 await pool.getConnection(),并捕獲 err.code === 'ER_BAD_DB_ERROR' 來識(shí)別數(shù)據(jù)庫(kù)不存在的情況。

到此這篇關(guān)于node.js判斷連接池是否正確連接上的兩種方法的文章就介紹到這了,更多相關(guān)node.js判斷連接池是否正確連接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析Node.js中使用依賴注入的相關(guān)問題及解決方法

    淺析Node.js中使用依賴注入的相關(guān)問題及解決方法

    這篇文章主要介紹了淺析Node.js中使用依賴注入的相關(guān)問題及解決方法,Node.js是一個(gè)將JavaScript應(yīng)用運(yùn)行于服務(wù)器端的框架,需要的朋友可以參考下
    2015-06-06
  • Node.js本地文件操作之文件拷貝與目錄遍歷的方法

    Node.js本地文件操作之文件拷貝與目錄遍歷的方法

    這篇文章主要介紹了Node.js本地文件操作之文件拷貝與目錄遍歷的方法,拷貝用到了Node的文件API,遍歷則舉了一個(gè)異步API實(shí)現(xiàn)的形式(Node的一大特點(diǎn)),需要的朋友可以參考下
    2016-02-02
  • NodeJS父進(jìn)程與子進(jìn)程資源共享原理與實(shí)現(xiàn)方法

    NodeJS父進(jìn)程與子進(jìn)程資源共享原理與實(shí)現(xiàn)方法

    這篇文章主要介紹了NodeJS父進(jìn)程與子進(jìn)程資源共享原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了nodejs基于cluster模塊實(shí)現(xiàn)父進(jìn)程與子進(jìn)程資源共享的相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • 淺析Node.js:DNS模塊的使用

    淺析Node.js:DNS模塊的使用

    本篇文章主要介紹了Node.js:DNS模塊的使用,DNS模塊包涵有關(guān)DNS查詢和操作的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • 詳解Node.js如何處理ES6模塊

    詳解Node.js如何處理ES6模塊

    學(xué)習(xí)JavaScript語言,你會(huì)發(fā)現(xiàn)它有兩種格式的模塊。一種是ES6模塊,簡(jiǎn)稱ESM;另一種是Node.js專用的CommonJS模塊,簡(jiǎn)稱 CJS。這兩種模塊不兼容。很多人使用Node.js,只會(huì)用require()加載模塊,遇到ES6模塊就不知道該怎么辦。本文就來談?wù)凟S6模塊在Node.js里面怎么使用。
    2021-05-05
  • Node.js之http模塊的用法

    Node.js之http模塊的用法

    這篇文章主要介紹了Node.js之http模塊的用法,對(duì)Node.js感興趣的同學(xué),可以參考下
    2021-04-04
  • 淺談Koa服務(wù)限流方法實(shí)踐

    淺談Koa服務(wù)限流方法實(shí)踐

    本篇文章主要介紹了淺談Koa服務(wù)限流方法實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 一行命令搞定node.js 版本升級(jí)

    一行命令搞定node.js 版本升級(jí)

    今天,又發(fā)現(xiàn)一個(gè)超級(jí)簡(jiǎn)單的升級(jí)node.js的方法。一行命令搞定,省去了重新編譯安裝的過程。
    2014-07-07
  • nodejs微信開發(fā)之授權(quán)登錄+獲取用戶信息

    nodejs微信開發(fā)之授權(quán)登錄+獲取用戶信息

    這篇文章主要介紹了nodejs微信開發(fā)之授權(quán)登錄+獲取用戶信息,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • 輕松開發(fā) Streamable HTTP MCP Server

    輕松開發(fā) Streamable HTTP MCP Server

    本文介紹了MCP協(xié)議中stdio和SSE協(xié)議的優(yōu)缺點(diǎn),以及MCP的最新協(xié)議StreamableHTTP的特性,韓老師還分享了如何使用YeomanGeneratorforMCPServer快速開發(fā)一個(gè)支持StreamableHTTP的MCPServer,并在VSCode中進(jìn)行調(diào)試
    2025-05-05

最新評(píng)論

崇礼县| 会同县| 合水县| 雷山县| 东乌珠穆沁旗| 景宁| 永仁县| 望奎县| 平湖市| 枣阳市| 桃源县| 麻江县| 芦山县| 陆河县| 衡南县| 穆棱市| 新巴尔虎左旗| 建宁县| 河池市| 乳山市| 苍南县| 申扎县| 南岸区| 太和县| 晋中市| 武胜县| 莲花县| 沾益县| 梨树县| 南江县| 张家川| 兴义市| 永和县| 剑阁县| 唐海县| 民权县| 南华县| 镇原县| 海宁市| 荣成市| 凤山县|