Node 連接 MySQL

安裝驅(qū)動(dòng)

Node 連接 MySQL 首先需要安裝 MySQL 驅(qū)動(dòng)

mysqljs/mysql

npm install --save mysql

連接數(shù)據(jù)庫(kù)

連接數(shù)據(jù)庫(kù)的方式很簡(jiǎn)單

  • 初始化配置伸头,獲得連接實(shí)例
  • 調(diào)用實(shí)例的.connect()方法
  • 查詢數(shù)據(jù)
  • 關(guān)閉連接

代碼如下:

const mysql = require('mysql'); // mysql node driver
const mysqlConfig = require('../secret/mysql.config');   // mysql配置文件
const console = require('tracer').colorConsole(); // 增強(qiáng)console

// 初始化數(shù)據(jù)庫(kù)配置, mysql端口號(hào)默認(rèn)為3306
const connection = mysql.createConnection({
    host: mysqlConfig.host,
    user: mysqlConfig.user,
    password: mysqlConfig.password,
    database: mysqlConfig.database,
});

// 連接數(shù)據(jù)庫(kù)
connection.connect(function (err) {
    if (err) {
        console.error('error connecting: ', err);
    }
    console.debug('connected id is', connection.threadId);
});

connection.query('SELECT * FROM articles', function (err, results, fields) {
    if (err) {
        console.error(err);
    }
    console.debug('results', results);
});

connection.end();
查詢結(jié)果

為了安全性考慮,這里講數(shù)據(jù)庫(kù)的用戶名和密碼信息保存在單另的一個(gè)js文件里经瓷,如下:


連接池

如果不想程序在查詢數(shù)據(jù)時(shí)卡死或等待過(guò)長(zhǎng)時(shí)間翠储,一般不推薦在node中開(kāi)啟一個(gè)連接后全部查詢都用這個(gè)鏈接并且不關(guān)閉绘雁,因?yàn)椋阍嚵司椭罏槭裁戳?/p>

連接池是必要的援所,因?yàn)橹挥靡粋€(gè)單連接操作數(shù)據(jù)庫(kù)會(huì)出現(xiàn)一些問(wèn)題庐舟,比如每次查詢都要建立連接然后再關(guān)閉?建立連接和斷開(kāi)連接會(huì)有性能開(kāi)銷的住拭,而且如果只有一個(gè)連接實(shí)例挪略,并發(fā)的時(shí)候就傻了

所以連接池是非常必要的

建立連接池

建立連接池很簡(jiǎn)單历帚,只需要將mysql.createConnection方法改為mysql.createPool方法即可,可以在初始化的時(shí)候加一個(gè)connectionLimit參數(shù)(一次創(chuàng)建的最大連接數(shù)杠娱。 (默認(rèn)值:10))

const mysql = require('mysql'); // mysql node driver
const mysqlConfig = require('../secret/mysql.config');   // mysql配置文件
const console = require('tracer').colorConsole(); // 增強(qiáng)console

// 初始化數(shù)據(jù)庫(kù)配置,建立連接池 mysql端口號(hào)默認(rèn)為3306
const pool = mysql.createPool({
    connectionLimit: 10,    // 連接數(shù)量
    host: mysqlConfig.host,
    user: mysqlConfig.user,
    password: mysqlConfig.password,
    database: mysqlConfig.database,
});

// 直接使用 pool.query
pool.query('SELECT * FROM articles', function (err, results, fields) {
    if (err) {
        console.error(err);
        return;
    }
    console.debug('results', results);
});

// 通過(guò) pool.getConnection 獲得鏈接
pool.getConnection(function (err, connection) {
    if (err) {
        console.error(err);
        return;
    }
    connection.query('SELECT * FROM articles', function (err, results, fields) {
        if (err) {
            console.error(err);
            return;
        }
        console.debug('results', results);

        connection.release();   // 釋放該鏈接挽牢,把該鏈接放回池里供其他人使用

        // connection.destroy();   // 如果要關(guān)閉連接并將其從池中刪除,請(qǐng)改用connection.destroy()摊求。該池將在下次需要時(shí)創(chuàng)建一個(gè)新的連接禽拔。
    });
});

查詢的方式有兩種:

  • 一種是簡(jiǎn)單的直接使用pool.query,這種方式的優(yōu)點(diǎn)是簡(jiǎn)單室叉,且可以自動(dòng)回收connection

  • 另一種是使用pool.getConnection獲得特定的connection睹栖,再進(jìn)行查詢

他們兩的主要區(qū)別是:

參考文章:node.js中mysql連接池的使用

pool.getConnection獲取到的connection在其回調(diào)函數(shù)中是一致的,可以保證系列查詢?cè)谕粋€(gè)connection上依次串行執(zhí)行茧痕;pool.query每次調(diào)用則可能在不同的connection上執(zhí)行查詢

直接用 pool.query 每次都隨機(jī)分配 connection野来。當(dāng)有些操作需要保證是同一 connection 的時(shí)候,就獨(dú)立使用 pool.getConnection吧

所以結(jié)論是凿渊,大部分時(shí)間用 pool.query 就行了梁只,當(dāng)有些操作需要保證是同一 connection 的時(shí)候,就獨(dú)立使用 pool.getConnection

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末埃脏,一起剝皮案震驚了整個(gè)濱河市搪锣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌彩掐,老刑警劉巖构舟,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異堵幽,居然都是意外死亡狗超,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門朴下,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)努咐,“玉大人,你說(shuō)我怎么就攤上這事殴胧∩裕” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵团滥,是天一觀的道長(zhǎng)竿屹。 經(jīng)常有香客問(wèn)我,道長(zhǎng)灸姊,這世上最難降的妖魔是什么拱燃? 我笑而不...
    開(kāi)封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮力惯,結(jié)果婚禮上碗誉,老公的妹妹穿的比我還像新娘召嘶。我一直安慰自己,他們只是感情好哮缺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布苍蔬。 她就那樣靜靜地躺著,像睡著了一般蝴蜓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俺猿,一...
    開(kāi)封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天茎匠,我揣著相機(jī)與錄音,去河邊找鬼押袍。 笑死诵冒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谊惭。 我是一名探鬼主播汽馋,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼圈盔!你這毒婦竟也來(lái)了豹芯?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤驱敲,失蹤者是張志新(化名)和其女友劉穎铁蹈,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體众眨,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡握牧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娩梨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沿腰。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖狈定,靈堂內(nèi)的尸體忽然破棺而出颂龙,到底是詐尸還是另有隱情,我是刑警寧澤掸冤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布厘托,位于F島的核電站,受9級(jí)特大地震影響稿湿,放射性物質(zhì)發(fā)生泄漏铅匹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一饺藤、第九天 我趴在偏房一處隱蔽的房頂上張望包斑。 院中可真熱鬧流礁,春花似錦、人聲如沸罗丰。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)萌抵。三九已至找御,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绍填,已是汗流浹背霎桅。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讨永,地道東北人滔驶。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像卿闹,于是被迫代替她去往敵國(guó)和親揭糕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 我也是第一次用node連接MySQL數(shù)據(jù)庫(kù)的锻霎,如果有哪些操作失誤的部分還請(qǐng)大家見(jiàn)諒的著角,不過(guò)這篇文章確實(shí)不錯(cuò)因?yàn)樗?..
    等不來(lái)的期待閱讀 3,617評(píng)論 0 10
  • 模塊Github地址 安裝 如果需要以前的版本0.9.x系列的文檔,請(qǐng)?jiān)L問(wèn)v0.9 branch.有時(shí)你可以從gi...
    明明三省閱讀 6,227評(píng)論 1 24
  • 原文鏈接node連接mysql mysql安裝 首先mysql下載mysql解壓縮版windows配置 mysql...
    bestvist閱讀 299評(píng)論 3 6
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法量窘,類相關(guān)的語(yǔ)法雇寇,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法蚌铜,異常的語(yǔ)法锨侯,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,630評(píng)論 18 399
  • 感恩我的母親讓我來(lái)到這個(gè)世界,感恩母親給予我您所能對(duì)您的女兒在那個(gè)時(shí)刻作出的最大付出冬殃。感恩女兒讓我成長(zhǎng)囚痴,認(rèn)識(shí)...
    娃娃的家閱讀 456評(píng)論 6 3