在本教學中,您將學習如何從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的相關程式碼。
首先,使用以下語句匯入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資料庫。