跳至主要內容

如何使用 Prisma ORM 搭配 TanStack Start

5 分鐘

簡介

Prisma ORM 簡化了資料庫互動,而 TanStack Start 則為建構現代化 React 應用程式提供了強大的框架。搭配 Prisma Postgres,它們能透過型別安全的查詢和高效的資料管理,提供流暢的全端開發體驗。

本指南將引導您從零開始,將 Prisma ORM 與 Prisma Postgres 資料庫整合到 TanStack Start 專案中。

先決條件

1. 設定您的專案

首先,請建立一個新的 TanStack Start 專案。

npm create @tanstack/start@latest
資訊
  • 您想為專案命名為什麼? tanstack-start-prisma
  • 您想使用 Tailwind CSS 嗎?
  • 選擇工具鏈
  • 選擇部署轉接器 Nitro
  • 您想為專案加入哪些附加元件? Prisma
  • 您需要任何範例嗎?
  • Prisma:資料庫提供者 Prisma PostgresSQL

這將建立一個名為 tanstack-start-prisma 的新資料夾,並為您建立一個新的 Prisma Postgres 資料庫。最後會列印出資料庫連線字串。

●  Database Connection

│ Connection String:

│ postgresql://b4889.....

複製此連線字串,並在 .env.local 中設定 DATABASE_URL 變數。

# Database URL for PostgreSQL
DATABASE_URL="postgresql://b4889....."

2. 設定 Prisma

2.1. 定義您的 Prisma Schema

schema.prisma 中,我們待辦事項 (todos) 的模型定義在 generator 和 datasource 區塊之後。

prisma/schema.prisma
generator client {
provider = "prisma-client"
output = "../app/generated/prisma"
}

datasource db {
provider = "postgresql"
}

model Todo {
id Int @id @default(autoincrement())
title String
createdAt DateTime @default(now())
}

這會建立一個將被推送到資料庫的 Todo 模型。

2.2. 設定 Prisma Client 產生器

現在,執行以下指令來建立資料庫表格

npm run db:seed -- --name init

2.3. 為資料庫進行種子植入 (Seed)

產生專案所需的 Prisma Client;

npm run db:generate

然後使用 prisma/ 目錄下的 seed.ts 檔案來植入專案資料。

npm run db:seed

並開啟 Prisma Studio 來檢視您的資料

npm run db:studio

3. 將 Prisma 整合至 TanStack Start

3.1 Prisma Client

與其在每個檔案中建立新的 Prisma Client 實例,TanStack Start 擁有一個 db.ts,可建立一個能全域共享的單一實例。

src/db.ts
import { PrismaClient } from './generated/prisma/client.js'

import { PrismaPg } from '@prisma/adapter-pg'

const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL!,
})

declare global {
var __prisma: PrismaClient | undefined
}

export const prisma = globalThis.__prisma || new PrismaClient({ adapter })

if (process.env.NODE_ENV !== 'production') {
globalThis.__prisma = prisma
}

3.2 在載入時獲取資料

首先,匯入必要的模組。然後,使用 createServerFn 函式建立一個伺服器函式。此函式將使用 .findMany() 方法從資料庫獲取資料。

src/routes/index.tsx
import { createFileRoute } from "@tanstack/react-router";
import { createServerFn } from "@tanstack/react-start";
import { prisma } from '../db';

export const Route = createFileRoute("/")({
component: Home,
});

const getTodos = createServerFn({ method: "GET" }).handler(async () => {
return prisma.todo.findMany();
});

function Home() {
return (
<div>
</div>
);
}

TanStack Start 允許函式透過 createFileRoute 函式中的 loader 函式在載入時執行。請使用此程式碼在載入時獲取使用者及其文章。

app/routes/index.tsx
import { createFileRoute } from '@tanstack/react-router';
import { createServerFn } from '@tanstack/react-start';
import { prisma } from '../db';

export const Route = createFileRoute("/")({
component: Home,
loader: () => {
return getTodos();
},
});

const getTodos = createServerFn({ method: "GET" }).handler(async () => {
return prisma.todo.findMany();
});

function Home() {
return (
<div>
<h1>Todos</h1>
</div>
);
}

使用 Route.useLoaderData() 在主元件中儲存來自 loader 的回應。

app/routes/index.tsx
import { createServerFn } from "@tanstack/react-start";
import { createFileRoute } from "@tanstack/react-router";
import { prisma } from '../db';

export const Route = createFileRoute("/")({
component: Home,
loader: () => {
return getTodos();
},
});

const getTodos = createServerFn({ method: "GET" }).handler(async () => {
return prisma.todo.findMany();
});

function Home() {
const todos = Route.useLoaderData();

return (
<div>
<h1>Todos</h1>
</div>
);
}

3.3 顯示待辦事項

接下來,您將更新首頁以顯示從資料庫檢索到的資料。

遍歷 (map) todos 並將其顯示在清單中。

app/routes/index.tsx
import { createFileRoute } from '@tanstack/react-router';
import { createServerFn } from '@tanstack/react-start';
import { prisma } from '../db';

export const Route = createFileRoute('/')({
component: App,
loader: () => getTodos(),
});

const getTodos = createServerFn({ method: 'GET' }).handler(async () => {
return prisma.todo.findMany();
});

function App() {
const todos = Route.useLoaderData();

return (
<div>
<ul>
{todos.map(todo => (
<li key={todo.id}>{todo.title}</li>
))}
</ul>
</div>
);
}

此設定將直接從資料庫獲取待辦事項並顯示在您的頁面上。

後續步驟

您已成功將 Prisma ORM 與 TanStack Start 整合,建立了一個流暢的全端應用程式。以下是接下來可以嘗試的一些建議:

  • 擴充您的 Prisma 模型以處理更複雜的資料關聯。
  • 實作額外的 CRUD 操作以增強應用程式的功能。
  • 探索 Prisma 和 TanStack Start 的更多功能以加深理解。
  • 查看 Prisma Postgres 以了解如何擴展您的應用程式。

更多資訊


與 Prisma 保持聯繫

透過以下方式與我們聯繫,繼續您的 Prisma 旅程: 我們的活躍社群。保持資訊靈通、參與其中,並與其他開發者合作

我們衷心感謝您的參與,並期待您成為我們社群的一份子!

© . This site is unofficial and not affiliated with Prisma Data, Inc.