Connecting to the MySQL Database Server from Node.js

摘要:在本教程中,您将学习如何从 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 数据库。

本教程有帮助吗?