Node.js 中的 Seeder

2025年2月26日 | 阅读 7 分钟

引言

在软件开发的概念中,尤其是在数据库的创建过程中,总是需要为该数据库提供初始数据或占位符数据。Seeder 是一种脚本或工具,可以将一些数据放入数据库或数据库中的表中。Seeding 通常在开发和测试阶段应用,以确认数据库能够为应用程序功能提供数据。

Seeder 的重要性

Seeder 因多种原因至关重要:

  • 初始数据设置: Seeder 在获取运行应用程序所需的数据方面起着至关重要的作用。这些数据可以包括应用程序启动时所需的默认设置、用户角色和基本记录。
  • 测试和开发: 它们有助于在开发人员使用 seeder 测试功能和性能时保持提供数据的一致性。这是调试的关键实践,并且可以最大程度地减少每次运行之间的差异,从而快速发现新问题。
  • 数据库状态管理: Seeder 还可以执行操作以将数据库置于特定状态。这在测试环境中特别有用,因为测试可能会更改数据库的状态,然后需要为测试运行设置一个基线。

Seeder 的用例

Seeder 具有广泛的用例,其中一些包括:

  • 填充查找表: COBOL 程序查找表可以包含常量信息,例如国家/地区、州或状态码。Seeder 确保这些表在不同环境中都已充分填充。
  • 演示的示例数据: 有意义的示例数据也可以在准备应用程序向利益相关者或客户进行演示时改进演示。
  • 测试用户场景: 由于存在管理员控制面板,seeder 可以创建具有不同访问级别的多个用户帐户。

Seeder 的类型

Seeder 可以根据其目的进行分类:

  • 初始 Seeder: 这些用于在创建数据库时设置数据库的初始条件。它们通常仅在首次创建或初始设置数据库时运行。
  • 开发 Seeder: 这些 seeder 包含应用程序开发过程中在数据库中使用的数据。如果需要,可以多次执行它们,以将数据库置于所需状态。
  • 测试 Seeder: 这些 seeder 在测试开始时有助于将所需数据加载到数据库中,尤其是在测试环境中。

Seeder 的最佳实践

Node.js 中 Seeder 有多种最佳实践。一些主要的 Seeder 最佳实践如下:

  • 幂等性: 还观察到 seeder 类型操作应该是幂等的,即多次运行 seeder 不会产生不一致或重复的数据。这意味着数据库始终处于可预测的状态,这是理想的。
  • 数据分离: Seed 数据应与实际应用程序代码分开。这有助于将 seed 数据与应用程序分开维护,因为后者与前者解耦。
  • 特定于环境的 Seeder: 可以存在开发 seed 数据、测试 seed 数据和实际生产 seed 数据。Seeder 可以满足这些特定需求,而不会影响其他设置。
  • 版本控制: 将 seeder 维护在版本控制工具下,以便可以看到随时间推移所做的更改。
  • 错误处理: 在 Seeder 中引入高效的异常处理机制,以包含数据插入过程中遇到的问题。这有助于识别问题并验证将要输入服务器的数据。

工具和库

  • Sequelize: Node.js 的一个对象关系映射工具,可以为应用程序提供干净、轻松的数据库交互。Sequelize 增加的另一个扩展是迁移和 seeder。它提供了定义 seeder 的更合适的方式,并且易于与数据库模型兼容。
  • Knex.js: 一个用 Node.js 编写的用于构建相关 SQL 查询的库。Knex.js 支持迁移和 seeders。它在编写 SQL 查询和管理数据库模式更改方面非常灵活。
  • TypeORM: Node.js 的另一个流行 ORM 是另一个受 jQuery 启发的 ORM,基于 get text 的语法。它可能听起来有点复杂,但实际上是一个开发完善且功能全面的 ORM 工具。通过脚本或插件可以实现 TypeORM 中的 Seeding。它最初是为了与 TypeScript 一起使用而开发的,并且也兼容纯 JavaScript。
  • Mongoose: 据透露,对于 MongoDB 用户来说,Mongoose 被认为是一个ODM(对象数据建模)库。MongoDB 的一个限制是它不能直接提供 seeders。尽管如此,这并不是一个限制,因为可以创建脚本将数据放入集合中。

Node.js 中 Seeder 的步骤

如果您想在 Node.js 中实现 Seeder,可以使用以下步骤。

步骤 1:设置 Sequelize

首先,您需要在 Node.js 项目中设置Sequelize。假设您已经安装了 Sequelize 和必要的数据库驱动程序,请配置您的Sequelize实例。

步骤 2:定义模型

接下来,定义您的模型。在此示例中,让我们创建一个简单的User 模型。

步骤 3:创建 Seeder 脚本

现在,创建一个 seeder 脚本来用初始数据填充User 表

步骤 4:运行 Seeder

要运行 seeder,您需要使用 Sequelize CLI。确保您已安装并配置了它。然后,执行以下命令:

输出

运行 seeder 后,您应该会在数据库中看到以下输出:

 
| 1   | john_doe  | john@example.com  | password123 |
| 2   | jane_doe  | jane@example.com  | password456 |
| 3   | sam_smith | sam@example.com   | password789 |   

将 Seeder 融入开发流程

  • 自动化 Seeding: Seeding 应应用于构建过程。使用 Gulp 或 Grunt 等任务运行器运行 seeder,或者在设置或重置开发环境时使用 npm 脚本。
  • 在 CI/CD 流水线中使用 Seeder: 在遵循 CI/CD 流水线实践时,系统地检查 seeder 是否在设置阶段运行。这使得所有部署和测试环境都可以拥有必要的初始数据集,从而最大程度地减少了间隙和错误的形成。
  • 数据库快照: 对于大型数据集或复杂应用程序,您可以将数据库快照与 seeder 结合使用。它们只是创建数据库在给定时间的副本,这与备份类型相比可以快速且在最短的时间内完成。它可以用于加强与应用程序状态的集成,其中 seeder 可以在每个间隔添加/更新信息以反映应用程序的当前状态。
  • 特定于环境的 Seeder: 始终确保您的 seeder 脚本适合您的环境(开发、暂存或生产)。例如,在生产环境中,只显示关键数据,而在开发环境中,示例数据可以包含各种数据以进行测试。

文档和维护

  • 记录 Seeder 目的: 详细说明每个 seeder 的目标非常重要,以便用户能够轻松理解其作用。这需要说明该统计数据填充了什么数据、其依赖项以及与其功能相关的其他选项。
  • 定期更新 Seeder: 在构建应用程序的过程中,随着应用程序需求的增加,数据库的存在和命名可能会发生变化。
  • 版本控制: 理想情况下,您创建的任何 seeder 脚本都应与您的应用程序代码一起存储在版本控制系统中。此实践还可以让您跟踪进度,因为它促进了与其他利益相关者的协作。
  • 测试您的 Seeder: 与任何其他应用程序代码一样,应测试已设置的 seeder 以确保它们按预期工作。它添加了检查要输入数据库的数据的测试,并使用 seeded 数据检查数据库的状态。

结论

总之,Seeder 在 Node.js 中的应用是不可避免的。它是开发人员的工具包,提供了一种系统化的技术来拥有包含关键数据的数据库。了解其重要性,在您的工作流程中包含 Seeder,熟练地遵循 Seeder 的维护,并处理可能出现的潜在困难,将使您能够优势地利用 Seeder,同时为应用程序开发做出贡献并提高其效率。根据您的应用程序的规模和开发情况,Seeder 在维护任何环境中的数据库完整性方面一直非常有益。


下一个主题Web-scraping-in-nodejs