node.js判斷連接池是否正確連接上的兩種方法
在使用 mysql2/promise 的 createPool 時(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)的方法。通過(guò)調(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ò)誤:無(wú)法連接到數(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)證通過(guò)');
} catch (err) {
if (err.code === 'ER_BAD_DB_ERROR') {
console.error('數(shù)據(jù)庫(kù)不存在');
} else {
console.error('連接失敗:', err.message);
}
}如何識(shí)別“數(shù)據(jù)庫(kù)不存在”?
在 catch 塊中,你可以通過(guò)檢查 err.code 屬性來(lái)識(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ù)沒(méi)啟動(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' 來(lái)識(shí)別數(shù)據(jù)庫(kù)不存在的情況。
到此這篇關(guān)于node.js判斷連接池是否正確連接上的兩種方法的文章就介紹到這了,更多相關(guān)node.js判斷連接池是否正確連接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Node.js中設(shè)置響應(yīng)的MIME類型的代碼詳解
在 Node.js 中設(shè)置響應(yīng)的 MIME 類型是為了讓瀏覽器正確解析服務(wù)器返回的內(nèi)容,比如 HTML、CSS、圖片、JSON 等,我們通常通過(guò)設(shè)置響應(yīng)頭中的 Content-Type 字段來(lái)完成,本文就給大家詳細(xì)介紹了在Node.js中設(shè)置響應(yīng)的MIME類型的方法,需要的朋友可以參考下2025-04-04
koa上傳excel文件并解析的實(shí)現(xiàn)方法
這篇文章主要介紹了koa上傳excel文件并解析的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
nodejs 使用http進(jìn)行post或get請(qǐng)求的實(shí)例(攜帶cookie)
今天小編就為大家分享一篇nodejs 使用http進(jìn)行post或get請(qǐng)求的實(shí)例(攜帶cookie),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Node使用koa2實(shí)現(xiàn)一個(gè)簡(jiǎn)單JWT鑒權(quán)的方法
這篇文章主要介紹了Node使用koa2實(shí)現(xiàn)一個(gè)簡(jiǎn)單JWT鑒權(quán)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
node.js?express和koa中間件機(jī)制和錯(cuò)誤處理機(jī)制
這篇文章主要介紹了node.js?express和koa中間件機(jī)制和錯(cuò)誤處理機(jī)制,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07
NodeJS簡(jiǎn)單實(shí)現(xiàn)WebSocket功能示例
這篇文章主要介紹了NodeJS簡(jiǎn)單實(shí)現(xiàn)WebSocket功能,結(jié)合具體實(shí)例形式分析了nodejs實(shí)現(xiàn)WebSocket通信功能的客戶端與服務(wù)器端相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
nodejs npm錯(cuò)誤Error:UNKNOWN:unknown error,mkdir ''D:\Develop\n
今天小編就為大家分享一篇關(guān)于nodejs npm錯(cuò)誤Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03

