Node.js連線MySQL資料庫

2019-10-18 00:54:37

在本教學中,您將學習如何從node.js應用程式連線到MySQL資料庫伺服器。

安裝node.js MySQL驅動程式

有一些選項可以從node.js應用程式與MySQL進行互動。在本教學中,我們將向您展示如何使用名為mysqljs/mysql的MySQL的node.js驅動程式。

首先,建立一個用於儲存node.js應用程式的檔案夾,例如,在F:\worksp\mysql\nodejs\nodejs-connect目錄,並使用npm init命令建立package.json檔案:

F:\worksp\mysql\nodejs\nodejs-connect> npm init

其次,使用以下命令為MySQL軟體包安裝node.js

F:\worksp\mysql\nodejs\nodejs-connect> npm install mysql

第三步,在nodejs-connect檔案夾內建立connect.js,用於儲存連線到MySQL資料庫伺服器的程式碼。

我們將使用todoapp資料庫進行演示,因此,先執行以下命令在MySQL資料庫伺服器中建立資料庫:

CREATE DATABASE todoapp DEFAULT CHARSET utf8;

建立資料庫後,就可以從Node.js應用程式連線到MySQL資料庫了。接下來編寫Node.js的相關程式碼。

從node.js連線到MySQL資料庫伺服器

首先,使用以下語句匯入mysql模組:

let mysql = require('mysql');

其次,通過呼叫createConnection()方法並提供MySQL伺服器上的詳細資訊(如主機,使用者,密碼和資料庫),建立與MySQL資料庫的連線,如下所示:

let connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'todoapp'
});

在本範例中,我們在本地資料庫服務品上與todoapp資料庫的連線。

第三步,在連線物件上呼叫connect()方法連線到MySQL資料庫伺服器:

connect()方法接受一個具有err引數的回撥函式,如果發生任何錯誤,它將提供詳細的錯誤。

connection.connect(function(err) {
  if (err) {
    return console.error('error: ' + err.message);
  }

  console.log('Connected to the MySQL server.');
});

完整的connect.js程式程式碼如下所示 -

let mysql = require('mysql');

let connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '123456',
    database: 'todoapp'
});

connection.connect(function(err) {
  if (err) {
    return console.error('error: ' + err.message);
  }

  console.log('Connected to the MySQL server.');
});

我們來執行並測試一下connect.js程式 -

F:\worksp\mysql\nodejs\nodejs-connect>node connect.js
openssl config failed: error:02001003:system library:fopen:No such process
Connected to the MySQL server.

如果看到如上所示的「connected to the MySQL server」的訊息,那麼恭喜,您已經從node.js應用程式成功連線到MySQL資料庫伺服器。

假設使用MySQL使用者賬號的密碼有錯,並嘗試連線到資料,您將收到一條錯誤訊息:

F:\worksp\mysql\nodejs\nodejs-connect>node connect.js
openssl config failed: error:02001003:system library:fopen:No such process
error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES)

請注意,您在connection物件上呼叫的每個方法都按順序排隊和執行。

關閉資料庫連線

要正常關閉資料庫連線,請在connection物件上呼叫end()方法。

end()方法確保在資料庫連線關閉之前始終執行所有剩餘的查詢。

connection.end(function(err) {
  if (err) {
    return console.log('error:' + err.message);
  }
  console.log('Close the database connection.');
});

要立即強制連線,可以使用destroy()方法。 destroy()方法保證不會再為連線觸發回撥或事件。

connection.destroy();

請注意,destroy()方法不會像end()方法那樣採取任何回撥引數。

到目前為止,整個connect.js檔案的完整程式碼如下 -

let mysql = require('mysql');

let connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '123456',
    database: 'todoapp'
});

connection.connect(function(err) {
  if (err) {
    return console.error('error: ' + err.message);
  }

  console.log('Connected to the MySQL server.');
});

//connection.destroy();
connection.end(function(err) {
  if (err) {
    return console.log('error:' + err.message);
  }
  console.log('Close the database connection.');
});

池連線/連線池

node.js模組的MySQL驅動程式為您提供了內建的連線池功能 假設您要建立一個具有5個連線的連線池:

var pool = mysql.createPool({
    connectionLimit: 5,
    host: 'localhost',
    user: 'root',
    password: '', 
    database: 'todoapp'
});

要從池中獲取連線,可以使用getConnection()方法:

pool.getConnection(function(err, connection) {
  // execute query
  // ...
});

要在完成連線後將其連線到池,可以呼叫connection.release()。 之後,連線將在池中可用,並可以由其他人再次使用。

pool.getConnection(function(err, connection) {
  // execute query
  // ...
  connnection.release();
});

要關閉連線並將其從池中刪除,請使用connection.destroy()方法。 如果下次需要,將在池中建立一個新的連線。

請注意,連線池中所建立的連線是懶惰的。例如,如果您使用5個連線組態連線池,但是同時僅使用2個連線,則連線池僅建立2個連線。

要關閉池中的所有連線,請使用pool物件的end()方法,如下所示:

pool.end(function(err) {
  if (err) {
    return console.log(err.message);
  }
  // close all connections
});

在本教學中,您已經學會了如何從node.js應用程式連線到MySQL資料庫。