在 Web 开发中,使用持久化的数据存储是必不可少的。虽然 NoSQL 数据库因其高度灵活性和可扩展性而被广泛使用,但许多应用程序仍然需要使用结构化数据存储。其中,SQL 数据库作为一种广泛使用的解决方案,具有出色的性能和可靠性,经常被用于处理各种任务。
本文将讨论如何在 Express.js 中使用 SQL 数据库。我将介绍如何将 MySQL 数据库与 Express.js 集成,以及如何通过 Sequelize ORM 来定义和操作 SQL 数据库。
步骤 1:安装依赖
在开始之前,我们需要确保已经安装以下依赖项:
- Express.js:在控制台输入
npm install express --save
进行安装。 - mysql:在控制台输入
npm install mysql --save
进行安装。 - sequelize:在控制台输入
npm install sequelize --save
进行安装。
步骤 2:连接数据库
首先,在 Express.js 中使用 MySQL 数据库,我们需要建立 MySQL 数据库的连接。为此,我们可以使用 mysql npm 包提供的 createConnection()
方法。在以下示例中,我们将建立与名为 "my_db" 的 MySQL 数据库的连接。
-- -------------------- ---- ------- ----- ----- - ----------------- ----- ---------- - ------------------------ ----- ------------ ----- ------- --------- --- --------- ------- --- ---------------------
步骤 3:使用 Sequelize 操作数据库
虽然我们可以直接使用 SQL 查询和操作数据库,但这不是最流行的方式。相反,我们可以使用 Sequelize ORM,它通过提供面向对象的模型和高级 API,简化了 SQL 数据库的操作。
让我们首先安装 Sequelize ORM:
npm install sequelize --save
接下来,我们需要创建 Sequelize 实例:
const Sequelize = require('sequelize'); const sequelize = new Sequelize('my_db', 'root', '', { host: 'localhost', dialect: 'mysql' });
该实例将为我们提供高级 API,以便定义数据模型和执行查询。
步骤 4:定义数据模型
在 Sequelize 中定义数据模型非常简单。以下示例显示了如何定义名为 "User" 的数据库表格:
const { Model, DataTypes } = require('sequelize'); class User extends Model {} User.init({ firstName: DataTypes.STRING, lastName: DataTypes.STRING }, { sequelize, modelName: 'user' });
在上面的代码中,我们定义了一个名为 "User" 的数据模型,该模型表示一个具有名为 "firstName" 和 "lastName" 的属性的用户。使用 Model.init()
方法可以定义与数据库表格相对应的模型。
步骤 5:执行查询
使用 Sequelize,执行查询很简单。以下示例演示如何向 User 表中插入一条新记录:
await sequelize.sync(); const user = await User.create({ firstName: "John", lastName: "Doe" }); console.log(user.toJSON());
通过调用 User.create()
方法,我们向 User 表格中插入一个新用户。由于 Sequelize 会自动创建SQL查询,因此您无需手动编写SQL。该操作的结果是一个 User 对象,我们可以通过调用 toJSON()
方法,将其转换成 JSON 格式打印到控制台。
结论
在本文中,我们已经学习了如何在 Express.js 中使用 SQL 数据库。首先,我们学习了如何通过 mysql 包来连接 MySQL 数据库。然后,我们介绍了 Sequelize ORM 的基础知识,并演示了如何定义数据模型和执行查询。使用这些技术,您可以轻松地使用 SQL 数据库与 Express.js 进行交互,从而开发出高度可靠和高性能的 Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67137995ad1e889fe20d3121