使用 Sequelize 迁移添加新列的步骤

使用 sequelize 迁移添加新列的步骤

为了提升博客平台的视觉效果和用户体验,我添加了一个缩略图列到数据库中,以便在每个文章页面显示文章缩略图。此更新与博客文章显示方式的改变相辅相成:从在一个页面显示所有文章,转变为每个文章拥有独立页面,从而改善了文章数量增多后的导航体验。

缩略图列存储图像链接字符串,这种方式保持了数据库的轻量级,并通过将图像存储处理与数据库分离,实现了关注点分离。

模型更新与迁移

首先,我更新了 blogposts 模型,添加了 thumbnail 列:

thumbnail: {    type: DataTypes.STRING,    allowNull: true, // 允许旧文章没有缩略图},

登录后复制

仅仅修改模型是不够的,PostgreSQL 数据库并不会自动识别新的列。我尝试访问数据库时收到了错误提示:“缩略图”列不存在。这是因为 Sequelize 模型定义了应用与数据库的交互方式,但不会自动修改数据库架构。因此,我需要使用 Sequelize 迁移来解决这个问题。

Sequelize 迁移配置

在创建迁移之前,我确保 Sequelize CLI 已在项目中初始化。 执行 npm install sequelize-cli 后,运行 npx sequelize-cli init (这会创建 config/ 文件夹和相关配置文件)。

我选择使用 config.js 而不是 config.json,并利用 dotenv 加载环境变量:

require('dotenv').config();module.exports = {    development: {        username: process.env.db_user,        password: process.env.db_password,        database: process.env.db_name,        host: process.env.db_host,        dialect: "postgres",    },    production: {        username: process.env.db_user,        password: process.env.db_password,        database: process.env.db_name,        host: process.env.db_host,        dialect: "postgres",    },};

登录后复制

然后我删除了 config.json 文件避免冲突。

生成迁移文件

接下来,我使用以下命令生成迁移文件:

npx sequelize-cli migration:generate –name add-thumbnail-to-blogposts

这会在 migrations/ 文件夹中创建一个名为 20241206232526-add-thumbnail-to-blogposts.js 的文件(时间戳可能不同)。我修改了此文件:

module.exports = {  up: async (queryInterface, Sequelize) => {      await queryInterface.addColumn('blogposts', 'thumbnail', {          type: Sequelize.STRING,          allowNull: true,      });  },  down: async (queryInterface) => {      await queryInterface.removeColumn('blogposts', 'thumbnail');  },};

登录后复制

应用迁移

为了更新开发数据库,我运行:

npx sequelize-cli db:migrate

这成功地将 thumbnail 列添加到 blogposts 表中。

生产环境迁移

在生产环境中,我遵循以下步骤:

备份生产数据库: 在进行任何更改之前,我备份了生产数据库。复制迁移文件: 确保更新后的 config.js 和 add-thumbnail-to-blogposts.js 文件已上传到生产服务器的代码库。设置环境变量: 验证 dotenv 需要的生产环境变量已正确配置(例如,在 cPanel 的设置中)。运行迁移: 在生产环境终端中,导航到后端应用目录并运行:

npx sequelize-cli db:migrate –env production

这成功地将 thumbnail 列添加到生产 PostgreSQL 数据库中。

总结

通过添加缩略图列,博客文章的显示更加生动直观,提升了用户体验。 本指南提供了一个清晰的步骤,展示如何使用 Sequelize 迁移安全地向数据库添加新列,保持模型和数据库架构的一致性。

以上就是使用 Sequelize 迁移添加新列的步骤的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2643233.html

(0)
上一篇 2025年3月7日 07:00:17
下一篇 2025年3月6日 09:01:52

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 登台环境与生产环境:了解主要差异

    软件开发中的部署流程通常涉及“登台”和“生产”两个关键环境。理解这两个环境的差异对于交付高质量应用和保障用户体验至关重要。本文将深入探讨暂存和生产环境的特点、用途、挑战和最佳实践。 暂存环境详解 暂存环境是生产环境的预演副本,用于测试新功能…

    2025年3月7日
    200
  • 我在 NPM 中的第一个库

    基于 material ui 的组件表。 这个想法来自于不同软件的不同实现中出现的许多困难 该板仅经过测试使用。 react 但可以在不同的工具中使用 材质表文档 ui 材质 npm i table-component-mui-lib 登录…

    2025年3月7日
    200
  • JavaScript 四舍五入到小数位:完整指南

    javascript精确舍入:掌握小数点后两位及更多 在JavaScript中,精确舍入至关重要,特别是舍入到小数点后两位,这对于财务计算和数据呈现都至关重要。本文将探讨Math.round和Math.floor等方法,并讲解如何将数字舍入…

    2025年3月7日
    200
  • NextJs:如何为索引页创建专用布局文件

    Next.js 应用目录与路由分组:构建灵活的页面布局 Next.js 的应用目录(app 目录)是组织路由和布局的关键。app 目录中通常包含 layout.jsx 和 page.jsx 文件,分别定义全局布局和页面内容。 全局布局 (a…

    2025年3月7日
    200
  • 探索 Boltnew:一个有前景的快速原型设计工具

    在瞬息万变的科技领域,快速将创意转化为原型至关重要,这直接关系到初创公司和产品团队的成败。最近,我深入体验了 Bolt.new,这是一款专注于简化原型构建和最小可行产品 (MVP) 开发的工具。如果您是一位追求创新的技术爱好者,那么 Bol…

    2025年3月7日
    200
  • 升级 React:声明式编程

    React 凭借其构建用户界面的强大能力而广受欢迎,但它与传统方法的关键差异在于其声明式编程范式。 让我们通过一个简单的水果列表示例来对比: 传统(命令式)编程: const list = document.createElement(‘u…

    2025年3月7日
    200
  • 软件工程的未来趋势、挑战和机遇

    软件工程的未来:2025年及以后的趋势、挑战与机遇 软件工程正经历着前所未有的变革,不断突破技术界限,重塑全球产业格局。从新兴技术到不断变化的工作环境,诸多因素共同驱动着这一动态领域的发展。本文将深入探讨未来几年将深刻影响软件工程的主要趋势…

    2025年3月7日
    200
  • JavaScript 深入研究:了解数据类型

    深入理解 JavaScript 数据类型 数据类型是编程语言的基础,决定了如何存储、处理和操作数据。掌握数据类型,能编写更高效、更可靠的代码。本文将结合 JavaScript 示例,讲解数据类型的概念、重要性及其分类。 什么是数据类型? 数…

    2025年3月7日
    200
  • 使用 TypeScript 添加到脚本

    封面图片来源: Daria Kraplak 目录 简介TypeScript 的目标JavaScript 与 TypeScript 的比较总结 简介 在深入了解 TypeScript 之前,让我们先回顾一下 JavaScript!你可能不知道…

    2025年3月7日
    200
  • 超越基础:掌握 NodeJS 中的流

    引言 高效的数据处理是任何应用程序的关键。在 Node.js 中,流 (Streams) 提供了一种强大的机制,能够以增量方式处理数据,从而最大限度地减少内存占用并提升性能。本文将深入探讨 Node.js 流的机制,并通过实际案例演示其应用…

    2025年3月7日
    200

发表回复

登录后才能评论