摘要:在本教程中,您将学习如何从 Node.js 应用程序连接到 MySQL 数据库服务器。
为 MySQL 安装 Node.js 驱动程序
有一些选项可以从 Node.js 应用程序与 MySQL 进行交互。在本教程中,我们将向您展示如何使用 MySQL 的 Node.js 驱动程序mysqljs/mysql
。
首先,创建一个用于存储node.js应用程序的文件夹,例如node-mysql
,并使用npm init
命令创建package.json
文件:
npm init
其次,使用以下命令安装 Node.js for MySQL 包:
npm install mysql
第三,在node-mysql
文件夹中创建connect.js
,用于存储连接到MySQL数据库服务器的代码。
我们将使用todoapp
数据库进行演示,因此,您应该通过运行以下CREATE DATABASE
语句在 MySQL 数据库服务器中创建数据库:
CREATE DATABASE todoapp;
Code language: SQL (Structured Query Language) (sql)
创建数据库后,您就可以从 Node.js 应用程序连接到它。
从node.js连接到MySQL数据库服务器
首先,使用以下语句导入mysql
模块:
let mysql = require('mysql');
Code language: JavaScript (javascript)
其次,通过调用createConnection()
方法创建与 MySQL 数据库的连接,并提供 MySQL 服务器的详细信息,例如主机、用户、密码和数据库,如下所示:
let connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'todoapp'
});
Code language: JavaScript (javascript)
在此示例中,我们创建了到本地数据库服务器中的todoapp
数据库的连接。
第三,调用connection
对象的connect()
方法来连接MySQL数据库服务器:
connection.connect(function(err) {
if (err) {
return console.error('error: ' + err.message);
}
console.log('Connected to the MySQL server.');
});
Code language: JavaScript (javascript)
connect()
方法接受一个回调函数,该函数具有err
参数,如果发生任何错误,该函数会提供详细的错误信息。
让我们测试connect.js
程序。
> node connect.js
Connected to the MySQL server
Code language: JavaScript (javascript)
如果您看到“已连接到 MySQL 服务器”的消息,那么恭喜您,您已成功从 Node.js 应用程序连接到 MySQL 数据库服务器。
假设数据库服务器中不存在todoapps
数据库,并且您尝试连接到它,您将收到一条错误消息:
> node connect.js
error: ER_BAD_DB_ERROR: Unknown database 'todoapps'
Code language: JavaScript (javascript)
请注意,您在connection
对象上调用的每个方法都会排队并按顺序执行。
关闭数据库连接
要正常关闭数据库连接,请调用connection
对象的end()
方法。
end()
方法确保所有剩余查询始终在数据库连接关闭之前执行。
connection.end(function(err) {
if (err) {
return console.log('error:' + err.message);
}
console.log('Close the database connection.');
});
Code language: JavaScript (javascript)
要强制立即关闭连接,可以使用destroy()
方法。 destroy()
方法保证不会再为连接触发任何回调或事件。
connection.destroy();
Code language: JavaScript (javascript)
请注意, destroy()
方法不像end()
方法那样接受任何回调参数。
池化连接
Node.js 模块的 MySQL 驱动程序为您提供了内置连接池功能。假设,您要创建一个具有 5 个连接的连接池:
var pool = mysql.createPool({
connectionLimit: 5,
host: 'localhost',
user: 'root',
password: '',
database: 'todoapp'
});
Code language: JavaScript (javascript)
要从池中获取连接,请使用getConnection()
方法:
pool.getConnection(function(err, connection) {
// execute query
// ...
});
Code language: JavaScript (javascript)
要在使用完毕后将连接返回到池中,可以调用connection.release()
。之后,该连接将在池中可用,并可供其他人再次使用。
pool.getConnection(function(err, connection) {
// execute query
// ...
connnection.release();
});
Code language: JavaScript (javascript)
要关闭连接并将其从池中删除,请使用connection.destroy()
方法。如果下次需要连接,将在池中创建一个新连接。
值得注意的是,池将延迟创建连接。例如,如果您为池配置 5 个连接,但同时仅使用 2 个连接,则池仅创建 2 个连接。
要关闭池中的所有连接,请使用pool
对象的end()
方法,如下所示:
pool.end(function(err) {
if (err) {
return console.log(err.message);
}
// close all connections
});
Code language: JavaScript (javascript)
在本教程中,您学习了如何从 Node.js 应用程序连接到 MySQL 数据库。