INTEGRITY Документация

Настройка и использование базы данных Prisma Postgres

Prisma Postgres представляет собой управляемую serverless-базу данных PostgreSQL. Она поддерживает такие возможности, как пулинг соединений, кеширование, подписки в реальном времени и рекомендации по оптимизации запросов.

В этом руководстве вы узнаете, как:

Предварительные требования

Чтобы следовать этому руководству, убедитесь, что у вас есть следующее:

1. Создайте новый проект Worker

Начните с использования C3 чтобы создать проект Worker в командной строке:

npm create cloudflare@latest prisma-postgres-worker -- --type=hello-world --ts=true --git=true --deploy=false

Затем перейдите в каталог проекта:

cd ./prisma-postgres-worker

Ваш первоначальный src/index.ts файл в настоящее время содержит простой обработчик запросов:

src/index.ts
export default {
	async fetch(request, env, ctx): Promise<Response> {
		return new Response("Hello World!");
	},
} satisfies ExportedHandler<Env>;

2. Настройка Prisma в вашем проекте

На этом шаге вы настроите Prisma ORM с базой данных Prisma Postgres с помощью CLI. Затем вы создадите и выполните вспомогательные скрипты для создания таблиц в базе данных и сгенерируете клиент Prisma для работы с ней.

2.1. Установка необходимых зависимостей

Установите Prisma CLI как dev-зависимость:

npm i -D prisma

Установите Клиентское расширение Prisma Accelerate так как это требуется для Prisma Postgres:

npm i @prisma/extension-accelerate

Установите dotenv-cli пакет чтобы загрузить переменные окружения из .dev.vars:

npm i -D dotenv-cli

2.2. Создание базы данных Prisma Postgres и инициализация Prisma

Инициализируйте Prisma в своём приложении:

npx prisma@latest init --db

Если у вас нет Prisma Data Platform аккаунта, или если вы не выполнили вход, команда предложит войти через один из доступных провайдеров аутентификации. Откроется окно браузера, где можно войти или создать аккаунт. После этого шага вернитесь в CLI.

После входа в систему (или если вход уже был выполнен) CLI предложит выбрать имя проекта и регион базы данных.

После завершения команды будут созданы:

Обратите внимание, что Cloudflare Workers не поддерживает .env файлы. Вы будете использовать файл под названием .dev.vars вместо .env файл, который был только что создан.

2.3. Подготовка переменных окружения

Переименуйте .env файл в корне вашего приложения, чтобы .dev.vars файле:

mv .env .dev.vars

2.4. Применение изменений схемы базы данных

Откройте schema.prisma файл в prisma папку и добавьте следующее User модель в базу данных:

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
	name 	String
}

Затем добавьте следующие вспомогательные скрипты в scripts раздел вашего package.json:

package.json
"scripts": {
  "migrate": "dotenv -e .dev.vars -- npx prisma migrate dev",
	"generate": "dotenv -e .dev.vars -- npx prisma generate --no-engine",
	"studio": "dotenv -e .dev.vars -- npx prisma studio",
  // Additional worker scripts...
}

Выполните скрипт миграции, чтобы применить изменения к базе данных:

npm run migrate

Когда появится запрос, укажите имя миграции (например, init).

После выполнения этих шагов Prisma ORM полностью настроен и подключён к вашей базе данных Prisma Postgres.

3. Разработка приложения

Измените src/index.ts файл и замените его содержимое следующим кодом:

src/index.ts
import { PrismaClient } from "@prisma/client/edge";
import { withAccelerate } from "@prisma/extension-accelerate";

export interface Env {
	DATABASE_URL: string;
}

export default {
	async fetch(request, env, ctx): Promise<Response> {
		const path = new URL(request.url).pathname;
		if (path === "/favicon.ico")
			return new Response("Resource not found", {
				status: 404,
				headers: {
					"Content-Type": "text/plain",
				},
			});

		const prisma = new PrismaClient({
			datasourceUrl: env.DATABASE_URL,
		}).$extends(withAccelerate());

		const user = await prisma.user.create({
			data: {
				email: `Jon${Math.ceil(Math.random() * 1000)}@gmail.com`,
				name: "Jon Doe",
			},
		});

		const userCount = await prisma.user.count();

		return new Response(`\
Created new user: ${user.name} (${user.email}).
Number of users in the database: ${userCount}.
		`);
	},
} satisfies ExportedHandler<Env>;

Запустите сервер разработки:

npm run dev

Перейдите на https://localhost:8787 чтобы увидеть, что ваше приложение выводит следующее:

Number of users in the database: 1

Каждый раз при обновлении страницы создаётся новый пользователь. Отображаемое число увеличивается на 1 при каждом обновлении, так как он возвращает общее количество пользователей в вашей базе данных.

4. Разверните приложение в Cloudflare

Когда приложение развёрнуто в Cloudflare, ему требуется доступ к DATABASE_URL переменную окружения, определённую локально в .dev.vars. Можно использовать npx wrangler secret put команду, чтобы загрузить DATABASE_URL для среды развертывания:

npx wrangler secret put DATABASE_URL

Когда появится запрос, вставьте DATABASE_URL значение (из .dev.vars). Если вы вошли в систему через Wrangler CLI, появится запрос с предложением создать новый Worker. Подтвердите, выбрав "yes":

✔ There doesn't seem to be a Worker called "prisma-postgres-worker". Do you want to create a new Worker with that name and add secrets to it? … yes

Затем выполните следующую команду, чтобы развернуть проект в Cloudflare Workers:

npm run deploy

wrangler CLI соберет и загрузит ваше приложение.

Если вы ещё не выполнили вход, wrangler CLI откроет окно браузера с предложением войти в Cloudflare dashboard.

После завершения развертывания проверьте его, перейдя по действующему URL-адресу, указанному в выводе развертывания, например https://{PROJECT_NAME}.workers.dev. Если возникли проблемы, убедитесь, что секреты добавлены правильно, и проверьте журналы развёртывания на наличие ошибок.

Следующие шаги

Поздравляем с созданием и развёртыванием простого приложения с Prisma Postgres и Cloudflare Workers!

Чтобы улучшить приложение ещё больше:

О том, как создать приложение реального времени с Cloudflare Workers и Prisma Postgres, читайте это руководство.