Fastify 是一个快速和低开销的 Web 框架,是一个使用 Node.js 编写的高性能 HTTP 服务器。它使用了异步请求和响应,可以轻松地处理高流量的请求。而 Sequelize 是一个面向对象的 ORM(对象关系映射)框架,适用于 Node.js 和其他 JavaScript 环境,可以让你轻松地操作数据库。
在这篇教程中,我们将介绍如何在 Fastify 中使用 Sequelize。我们将探讨如何设置 Sequelize,如何创建模型,如何进行基本 CRUD 操作,以及如何使用 Sequelize 执行高级查询。最后,我们也将用最佳实践指南对整个流程进行总结。
安装 Sequelize
在我们开始介绍如何使用 Sequelize 之前,先确保你已经安装了 Node.js 和 NPM。你需要运行以下命令来安装 Sequelize:
npm install --save sequelize
另外,你还需要安装以下数据库连接器之一:
- mysql2
- sqlite3
- pg
我们将以 SQLite 作为我们的数据库。你可以使用以下命令来安装 sqlite3:
npm install --save sqlite3
配置 Sequelize
要使用 Sequelize,你需要设置连接到 SQLite 数据库的相关信息。在项目的根目录下,创建一个名为 config.js 的文件,并添加以下内容:
-- -------------------- ---- ------- ----- ---- - ---------------- -------------- - - ------------ - -------- --------- -------- -------------------- ------------- -- ----------- - -------- --------- -------- -------------------- ------------- -- --
我们设置了 SQLite 作为我们的数据库,以及开发和生产环境的存储路径(在开发中,我们可以将其设置为根目录下的 db.sqlite 文件)。
接下来,在我们的应用程序中,我们需要创建一个 sequelize 对象(用于初始化 Sequelize),并使用 config.js 中的 SQLite 配置对其进行配置。在 app.js 文件中添加以下代码:
-- -------------------- ---- ------- ----- ------- - --------------------- ----- --------- - --------------------- ----- -------- - -------------------- ----- --------- - --- -------------------------------- ------------------------------- -- ----- ----- ----- -- - -- ----- - ----------------------- ---------------- - ----- ------------------------- ----------------------- --- ---- ----------- ---------------- ---
在代码中,我们初始化了一个 Sequelize 对象,并使用 config.js 中的开发配置对其进行了配置。接下来,我们使用 sequelize.authenticate() 方法验证连接,以确保我们已成功连接到数据库。在开发过程中,你可以使用 console.log 或调试工具来检查连接是否成功。
创建模型
在 Sequelize 中,你必须通过定义模型来告诉框架如何操作数据库。在我们的案例中,我们将创建一个 user 模型。在 Sequelize 中创建模型很容易,只需定义一个 JavaScript 对象,用于描述模型的属性。
为了创建用户模型,在 models 目录中创建一个 user.js 文件,然后将以下代码添加到文件中:
-- -------------------- ---- ------- ----- --------- - --------------------- ----- --------- - ---------------------------- ----- ---- - ------------------------ - --- - ----- ------------------ ----------- ----- -------------- ----- -- ---------- - ----- ----------------- ---------- ------ -- --------- - ----- ----------------- ---------- ------ -- -- - ----------- ----- --- -------------- - -----
在代码中,我们使用 sequelize.define() 方法创建一个名为 User 的模型,并添加了一些属性。我们定义了 id 属性,它是模型的主键。我们还定义了 firstName 和 lastName 属性(用于存储用户的名字),并设置了 allowNull 的值为 false,这将防止 firstName 和 lastName 属性为空。
我们还设置了 timestamps,这将在每次创建或更新记录时自动更新 createdAt 和 updatedAt 字段。这些字段用于跟踪记录的创建和修改时间。
基本 CRUD 操作
在上述过程中,我们已经创建了 user 模型。现在,我们来学习如何执行模型的基本 CRUD 操作。
创建记录
首先,我们将向数据库添加一些用户记录。在 app.js 文件的听取回调函数中添加以下代码:
-- -------------------- ---- ------- ----- ---- - ------------------------- ------------------------------- -- ----- ----- ----- -- - -- ----- - ----------------------- ---------------- - -- ----- --- ---------- -- --- -------- ----- ------------------------- ----------------------- --- ---- ----------- ---------------- -- --- ---- ------- -- --- -------- ----- ------------- ---------- ------- --------- ------ --- ----- ------------- ---------- ------- --------- ------ --- -------------------- --- ---- ----- -- --- ------------ ------------------- --------- -- ----------------------------------- ---
我们首先使用 User.create() 方法向数据库添加两个用户记录。在上面的代码中,我们添加了两个用户:John Doe 和 Jane Doe。
读取记录
接下来,我们将从数据库读取所有用户记录。将以下代码添加到 app.js 文件中:
fastify.get('/users', async (req, reply) => { const users = await User.findAll(); reply.send(users); });
我们使用 User.findAll() 方法查询数据库以获取所有用户的记录。在路由函数中,我们使用 await 关键字等待返回的结果,并使用 reply 对象将数据发送回客户端。
更新记录
现在,我们来更新一个用户记录。我们将更新 Jane Doe 的信息。将以下代码添加到 app.js 文件中:
-- -------------------- ---- ------- ------------------------ ----- ----- ------ -- - ----- - -- - - ----------- ----- - ---------- -------- - - --------- ----- ---- - ----- -------------- ------ - --- -- --- -- ------ - ------------- ---------- --------- --- ----------------- - ---- - ---------------- --- --------- - ---
在路由函数中,我们首先获取路由参数 id 和请求体中的 firstName 和 lastName。然后,我们使用 User.findOne() 方法查询数据库以查找具有指定 id 的用户记录。如果找到了用户记录,我们将使用 user.update() 方法更新 firstName 和 lastName 的值,并使用 reply 对象将更新后的用户记录发送回客户端。
删除记录
最后,我们来删除一条记录。我们将删除用户 John Doe 的记录。将以下代码添加到 app.js 文件中:
-- -------------------- ---- ------- --------------------------- ----- ----- ------ -- - ----- - -- - - ----------- ----- ---- - ----- -------------- ------ - --- -- --- -- ------ - ----- --------------- ---------------- ------ --- ---- ----------- - ---- - ---------------- --- --------- - ---
在路由函数中,我们首先获取路由参数 id。然后,我们使用 User.findOne() 方法查询数据库以查找具有指定 id 的用户记录。如果找到了用户记录,我们将使用 user.destroy() 方法删除该记录,并使用 reply 对象将删除操作的结果发送回客户端。
高级查询
除了上述基本的 CRUD 操作之外,Sequelize 还提供了一些用于执行高级查询的方法。在这一部分中,我们将探讨一些可用的高级查询方法。
筛选记录
我们可以使用 Sequelize 提供的 where 选项来筛选记录。将以下代码添加到 app.js 文件中:
-- -------------------- ---- ------- ---------------------------------------- ----- ----- ------ -- - ----- - -------- - - ----------- ----- ----- - ----- -------------- ------ - --------- -- --- ------------------ ---
在路由函数中,我们使用 Sequelize 提供的 where 选项来查询 lastName 属性等于请求参数的用户记录。
操作符
Sequelize 使用类似 SQL 的操作符来查询数据库。下面是一些常用的操作符:
$eq
: 等于$ne
: 不等于$gt
: 大于$gte
: 大于等于$lt
: 小于$lte
: 小于等于$like
: 匹配
例如,如果要查询 lastName 属性以 "Doe" 开头的所有用户记录,则可以使用以下代码:
-- -------------------- ---- ------- ---------------------------------------- ----- ----- ------ -- - ----- - -------- - - ----------- ----- ----- - ----- -------------- ------ - --------- - -------------------- --------------- -- -- --- ------------------ ---
在上面的代码中,我们使用 [Sequelize.Op.like]
操作符筛选 lastName 属性以请求参数开头的用户记录。
聚合操作
Sequelize 还支持一些聚合操作,例如计数、求和、平均值等。以下是一个示例:
fastify.get('/users/count', async (req, reply) => { const count = await User.count(); reply.send(count); });
在路由函数中,我们使用 User.count() 方法查询数据库以获取当前用户记录的总数。
最佳实践指南
在这个过程中,我们已经学习了使用 Sequelize 在 Fastify 中进行基本的 CRUD 操作以及一些高级查询。但是在实际应用中,还需要注意以下几点:
- 将模型保存在单独的文件中(例如,我们将 user 模型保存在 models/user.js 中)。
- 不要让 Sequelize 自动修改数据库。Sequelize 可能会导致数据丢失和不一致,因此更好的方法是手动更改数据库架构。
- 谨防 SQL 注入攻击。Sequelize 通过参数化查询防止 SQL 注入攻击,但是在处理用户提供的动态数据时,请使用 Sequelize 提供的参数化查询方法。
- 避免使用复杂的 ORM 框架。大型 ORM 框架可能会导致性能下降和不必要的复杂性。您可以考虑使用轻量级框架或原始查询代替复杂的 ORM 框架。
总结
在本教程中,我们介绍了如何在 Fastify 中使用 Sequelize。我们首先介绍了如何配置 Sequelize,并创建了一个 user 模型,用于描述我们想要存储的记录。然后,我们介绍了如何执行模型的基本 CRUD 操作,包括创建、读取、更新和删除记录。最后,我们讨论了一些高级查询和最佳实践指南。您现在应该可以使用 Sequelize 在 Fastify 中执行基本 CRUD 操作,并使用一些高级查询操作来检索特定的数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e2d866f6b2d6eab3e22fae