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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Node.js 框架与 ORM/课时/Drizzle ORM
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综合练习

Drizzle ORM

类型安全 SQL;对照 TypeORM。

35 分钟

Drizzle ORM

Drizzle 走 SQL-first、TypeScript 原生 路线:表结构即类型来源,查询写法接近 SQL,却全程有补全与编译期检查。与 Nest 常用的 TypeORM 相比,更轻、更透明。

学习目标

  • 定义 schema 并连接 PostgreSQL
  • 写 select / insert / where 与关系查询
  • 对照 TypeORM:何时选 Drizzle

Schema 与连接

import { pgTable, serial, varchar, timestamp } from "drizzle-orm/pg-core";
import { drizzle } from "drizzle-orm/node-postgres";
import pg from "pg";

export const tracks = pgTable("tracks", {
  id: serial("id").primaryKey(),
  slug: varchar("slug", { length: 64 }).notNull().unique(),
  title: varchar("title", { length: 255 }).notNull(),
  createdAt: timestamp("created_at").defaultNow(),
});

const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL });
export const db = drizzle(pool);

表定义即 TS 类型;改列名会直接在编译期报错。

查询示例

import { eq } from "drizzle-orm";

const list = await db.select().from(tracks).limit(20);

const one = await db
  .select()
  .from(tracks)
  .where(eq(tracks.slug, "nodejs-essentials"));

await db.insert(tracks).values({ slug: "demo", title: "Demo Track" });

无魔法 Active Record;SQL 意图清晰,便于 DBA 审查。

Drizzle vs TypeORM(Nest 默认)

DrizzleTypeORM
风格SQL-like builder装饰器 Entity
迁移drizzle-kittypeorm migration
学习曲线会 SQL 即上手概念多(Repository 等)
典型搭配Fastify/Hono 小服务nestjs-essentials

数据库建模与索引见 postgresql-essentials;TS 泛型与类型收窄见 typescript-essentials。

练习

  • 为 tracks 表写 drizzle-kit 迁移(本地 Postgres)
  • 实现 GET /api/tracks/:slug 查库返回 404/200
  • 对比同一查询用 raw SQL 与 Drizzle 的可读性

小结

Drizzle = 透明 SQL + 端到端类型。 下一课 Knex:迁移与 query builder 经典路线。

加载本节练习…
← 上一课fetch 与 HTTP 客户端下一课 →Knex 查询构建