You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 13 appDir中Prisma seed.ts的放置与Supabase数据填充方法

Next.js 13 App Dir 环境下 Supabase 种子数据填充方案

方法一:使用 Prisma 官方种子命令(推荐)

这是最规范的方案,直接利用 Prisma 原生机制,无需依赖 API 路由。

1. 编写种子数据脚本

在 prisma/seed.ts 中编写填充逻辑(确保为 ESM 格式):

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() {
  // 示例:批量创建用户,替换为你的业务数据即可
  await prisma.user.createMany({
    data: [
      { name: 'Alice', email: 'alice@example.com' },
      { name: 'Bob', email: 'bob@example.com' },
    ],
    skipDuplicates: true, // 避免重复插入已存在的数据
  });
}

main()
  .catch((err) => {
    console.error('种子数据填充失败:', err);
    process.exit(1);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

2. 修正 Package.json 配置

由于项目启用了 type: module,需调整 Prisma 种子命令的执行方式:

{
  // ...其他原有配置
  "prisma": {
    "seed": "tsx prisma/seed.ts"
  },
  "devDependencies": {
    // 添加 tsx 依赖(比 ts-node 更适配 ESM)
    "tsx": "^3.12.6"
  }
}

先安装依赖:npm install -D tsx

3. 执行种子填充

运行以下命令完成数据填充:

npx prisma db seed

如果需要在数据库迁移后自动执行种子脚本,可使用:

npx prisma migrate dev --seed

方法二:通过 App Router API 路由手动触发

适合需要在运行时手动触发填充的场景,生产环境需注意权限控制。

1. 创建 API 路由文件

在 app/api/seed/route.ts 中创建路由(App Router 要求 API 路由必须命名为 route.ts):

import { PrismaClient } from '@prisma/client';
import { NextResponse } from 'next/server';

const prisma = new PrismaClient();

// 仅允许 POST 请求触发填充
export async function POST() {
  try {
    // 执行种子数据逻辑
    await prisma.user.createMany({
      data: [
        { name: 'Charlie', email: 'charlie@example.com' },
      ],
      skipDuplicates: true,
    });

    return NextResponse.json({ message: '种子数据填充成功' }, { status: 200 });
  } catch (error) {
    return NextResponse.json({ error: '填充失败,请检查日志' }, { status: 500 });
  } finally {
    await prisma.$disconnect();
  }
}

2. 触发填充

启动开发服务器:npm run dev,然后通过 POST 请求访问 http://localhost:3000/api/seed(可使用 curl、Postman 或前端按钮触发)。

关键注意事项

  • 确保 prisma/schema.prisma 中的数据源 URL 正确指向 Supabase 的 Postgres 连接地址。
  • 种子脚本中务必加入重复数据判断(如 skipDuplicates),避免重复插入导致报错。
  • 生产环境使用 API 路由方案时,需添加权限验证(如管理员令牌校验),防止恶意调用。

内容的提问来源于stack exchange,提问作者Vicky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:32:17