CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Node.js 框架与 ORM/课时/Sequelize
RawBlame
课时目录12 节

Node.js 框架与 ORM

  1. 01Node 框架生态
  2. 02Fastify
  3. 03Hono
  4. 04fetch 与 HTTP 客户端
  5. 05Drizzle ORM
  6. 06Knex 查询构建
  7. 07Sequelize
  8. 08模板引擎
  9. 09Vitest 测试
  10. 10日志
  11. 11生产运行
  12. 12综合练习

Sequelize

经典 ORM;模型关联。

30 分钟

Sequelize

Sequelize 是 Node 生态 历史最久 的 ORM 之一:Model 类、关联(hasMany/belongsTo)、Hook、Migration CLI 一应俱全。维护老项目或读开源代码时,Sequelize 仍高频出现。

学习目标

  • 定义 Model 与字段类型
  • 配置 hasMany / belongsTo 关联
  • 理解 Sequelize 与 Drizzle/Knex 的取舍

Model 定义

import { Sequelize, DataTypes } from "sequelize";

const sequelize = new Sequelize(process.env.DATABASE_URL);

const Track = sequelize.define("Track", {
  slug: { type: DataTypes.STRING(64), allowNull: false, unique: true },
  title: { type: DataTypes.STRING(255), allowNull: false },
}, { tableName: "tracks", underscored: true });

await sequelize.sync(); // 开发用;生产请用 migration

生产环境 应用 sequelize-cli 迁移,而非 sync() 改表。

关联示例

const Lesson = sequelize.define("Lesson", {
  slug: DataTypes.STRING,
  title: DataTypes.STRING,
});

Track.hasMany(Lesson, { foreignKey: "track_id" });
Lesson.belongsTo(Track);

const track = await Track.findOne({
  where: { slug: "nodejs-essentials" },
  include: [Lesson],
});

Active Record 风格:findOne、create、update 挂在 Model 上,上手快,复杂查询时 SQL 不透明。

何时仍用 Sequelize

情况建议
遗留代码库已是 Sequelize维持 + 逐步抽查询
团队熟悉 ORM 抽象可继续,注意 N+1
新 API + TS + Postgres优先 Drizzle 或 Nest TypeORM

数据库设计与索引仍按 postgresql-essentials;Nest 集成见 nest-db。

练习

  • 定义 Track / Lesson 两表关联并 include 查询
  • 用 migration 创建表,禁用 sync() 上线路径
  • 对比同一查询在 Sequelize 与 Drizzle 下的 SQL 可读性

小结

Sequelize = 经典 ORM,关联与 Hook 齐全,新项目需权衡透明度。 下一课模板引擎:服务端 HTML。

加载本节练习…
← 上一课Knex 查询构建下一课 →模板引擎