Node.js + Prisma + PostgreSQL:类型安全的全栈数据层实战

详解 Prisma ORM 在 Node.js 中的完整用法:Schema 定义、Migration 工作流、CRUD API、关联查询、事务、Seed、连接池配置。含 Express 和 Nest.js 两种框架的集成示例。

Prisma 是当前 Node.js 生态中最现代化的 ORM:类型安全、自动迁移、可视化数据浏览器、卓越的开发体验。本文覆盖从 Schema 设计到生产部署的完整工作流。


一、初始化

npm install prisma @prisma/client
npx prisma init
// prisma/schema.prisma
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  name      String?
  posts     Post[]
  createdAt DateTime @default(now())
}

model Post {
  id       Int     @id @default(autoincrement())
  title    String
  content  String?
  published Boolean @default(false)
  author   User    @relation(fields: [authorId], references: [id])
  authorId Int
}

二、Migration 工作流

# 生成迁移文件
npx prisma migrate dev --name init

# 应用到生产数据库
npx prisma migrate deploy

# 生成 Prisma Client(类型自动更新)
npx prisma generate

# 打开数据浏览器
npx prisma studio

三、CRUD 示例(Express)

import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();

// 创建
const user = await prisma.user.create({
  data: { email: 'alice@example.com', name: 'Alice' },
});

// 查询(含关联)
const users = await prisma.user.findMany({
  include: { posts: { where: { published: true } } },
});

// 更新
const updated = await prisma.user.update({
  where: { id: 1 },
  data: { name: 'Alice Updated' },
});

// 事务
const [user, post] = await prisma.$transaction([
  prisma.user.create({ data: { email: 'bob@example.com' } }),
  prisma.post.create({ data: { title: 'Hello', authorId: 1 } }),
]);

相关阅读

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「frontend」更多文章