Node 連接 MySQL

安裝驅(qū)動

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

mysqljs/mysql

npm install --save mysql

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

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

  • 初始化配置,獲得連接實(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ù)庫配置, mysql端口號默認(rèn)為3306
const connection = mysql.createConnection({
    host: mysqlConfig.host,
    user: mysqlConfig.user,
    password: mysqlConfig.password,
    database: mysqlConfig.database,
});

// 連接數(shù)據(jù)庫
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ù)庫的用戶名和密碼信息保存在單另的一個(gè)js文件里,如下:


連接池

如果不想程序在查詢數(shù)據(jù)時(shí)卡死或等待過長時(shí)間,一般不推薦在node中開啟一個(gè)連接后全部查詢都用這個(gè)鏈接并且不關(guān)閉,因?yàn)?,你試了就知道為什么?/p>

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

所以連接池是非常必要的

建立連接池

建立連接池很簡單,只需要將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ù)庫配置,建立連接池 mysql端口號默認(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);
});

// 通過 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)閉連接并將其從池中刪除,請改用connection.destroy()。該池將在下次需要時(shí)創(chuàng)建一個(gè)新的連接。
    });
});

查詢的方式有兩種:

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

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

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

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

pool.getConnection獲取到的connection在其回調(diào)函數(shù)中是一致的,可以保證系列查詢在同一個(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)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容