← Cloudflare Workers / workers / tutorials
Подключение к базе данных PostgreSQL с помощью Cloudflare Workers
В этом руководстве вы узнаете, как создать приложение Cloudflare Workers и подключить его к базе данных PostgreSQL с помощью TCP-сокеты и Hyperdrive. Приложение Workers, которое вы создадите в этом руководстве, будет взаимодействовать с базой данных товаров в PostgreSQL.
Предварительные требования
Чтобы продолжить:
- Зарегистрируйтесь для получения Аккаунт Cloudflare ↗ если вы ещё этого не сделали.
- Установка
npm↗. - Установка
Node.js↗. Используйте менеджер версий Node, например Volta ↗ или nvm ↗ чтобы избежать проблем с правами доступа и переключать версии Node.js. Wrangler требует версии Node16.17.0или более поздней версии. - Убедитесь, что у вас есть доступ к базе данных PostgreSQL.
1. Создайте приложение Worker
Сначала используйте create-cloudflare CLI ↗ чтобы создать новое приложение Worker. Для этого откройте окно терминала и выполните следующую команду:
npm create cloudflare@latest -- postgres-tutorialЭто предложит вам установить create-cloudflare ↗ пакет и проведёт вас через мастер настройки.
Для настройки выберите следующие параметры:
- Для С чего вы хотите начать?, выберите
Hello World example. - Для Какой шаблон вы хотите использовать?, выберите
Worker only. - Для Какой язык вы хотите использовать?, выберите
TypeScript. - Для Хотите использовать git для контроля версий?, выберите
Yes. - Для Хотите развернуть приложение?, выберите
No(мы внесём некоторые изменения перед развёртыванием).
Если вы решите развернуть проект, вам будет предложено пройти аутентификацию (если вход еще не выполнен), после чего проект будет развернут. После этого вы всё равно сможете изменить код Worker и развернуть его повторно в конце этого руководства.
Теперь перейдите в только что созданный каталог:
cd postgres-tutorialВключите совместимость с Node.js
Совместимость с Node.js требуется для драйверов баз данных, включая Postgres.js, и должен быть настроен для вашего проекта Workers.
Для дат совместимости 2026-08-04 или более поздней версии проекты Workers и Pages включают оба nodejs_compat и nodejs_compat_v2 по умолчанию. Встроенные API среды выполнения и полифиллы доступны без дополнительной настройки. Для этих дат совместимости данные флаги не используются. Существующим проектам не нужно удалять их при обновлении даты совместимости.
Если ваша дата совместимости раньше 2026-08-04, добавьте nodejs_compat флаг совместимости в ваш конфигурационный файл Wrangler чтобы включить:
{
"compatibility_flags": [
"nodejs_compat"
]
}compatibility_flags = [ "nodejs_compat" ]Чтобы отключить Совместимость с Node.js полностью при дате совместимости 2026-08-04 или более поздней версии удалите положительные флаги, если они есть. Затем добавьте оба no_nodejs_compat и no_nodejs_compat_v2. Примеры настройки см. в Флаг совместимости с Node.js.
2. Добавление библиотеки подключения PostgreSQL
Чтобы подключиться к базе данных PostgreSQL, вам потребуется pg библиотека. В каталоге приложения Worker выполните следующую команду, чтобы установить библиотеку:
npm i pgЗатем установите типы TypeScript для pg библиотеку, чтобы включить проверку типов и автодополнение в коде TypeScript:
npm i -D @types/pg3. Настройка подключения к базе данных PostgreSQL
Выберите один из двух способов подключения к базе данных PostgreSQL:
Используйте строку подключения
Строка подключения содержит всю информацию, необходимую для подключения к базе данных. Это URL, который содержит следующую информацию:
postgresql://username:password@host:port/databaseЗамените username, password, host, port, а также database соответствующими значениями для вашей базы данных PostgreSQL.
Укажите свою строку подключения как secret чтобы он не хранился в виде открытого текста. Используйте wrangler secret put с именем переменной из примера DB_URL:
npx wrangler secret put DB_URL➜ wrangler secret put DB_URL
-------------------------------------------------------
? Enter a secret value: › ********************
✨ Success! Uploaded secret DB_URLЗадайте свой DB_URL секрет локально в .dev.vars файл, как описано в Локальная разработка с секретами.
DB_URL="<ENTER YOUR POSTGRESQL CONNECTION STRING>"Настройка явных параметров
Настройте каждый параметр базы данных как переменная окружения через Панель управления Cloudflare или в файле Wrangler. Ознакомьтесь с примером конфигурации файла Wrangler:
{
"vars": {
"DB_USERNAME": "postgres",
// Set your password by creating a secret so it is not stored as plain text
"DB_HOST": "ep-aged-sound-175961.us-east-2.aws.neon.tech",
"DB_PORT": 5432,
"DB_NAME": "productsdb"
}
}[vars]
DB_USERNAME = "postgres"
DB_HOST = "ep-aged-sound-175961.us-east-2.aws.neon.tech"
DB_PORT = 5_432
DB_NAME = "productsdb"Чтобы задать пароль в качестве secret чтобы он не хранился в виде открытого текста, используйте wrangler secret put. DB_PASSWORD это пример имени переменной для обращения к этому секрету в вашем Worker:
npx wrangler secret put DB_PASSWORD-------------------------------------------------------
? Enter a secret value: › ********************
✨ Success! Uploaded secret DB_PASSWORD4. Подключитесь к базе данных PostgreSQL в Worker
Откройте основной файл вашего Worker (например, worker.ts) и импортируйте Client класс из pg библиотека:
import { Client } from "pg";В fetch обработчике события, подключитесь к базе данных PostgreSQL выбранным способом: либо через строку подключения, либо через явные параметры.
Используйте строку подключения
// create a new Client instance using the connection string
const sql = new Client({ connectionString: env.DB_URL });
// connect to the PostgreSQL database
await sql.connect();Настройка явных параметров
// create a new Client instance using explicit parameters
const sql = new Client({
username: env.DB_USERNAME,
password: env.DB_PASSWORD,
host: env.DB_HOST,
port: env.DB_PORT,
database: env.DB_NAME,
ssl: true, // Enable SSL for secure connections
});
// connect to the PostgreSQL database
await sql.connect();5. Работайте с базой данных продуктов
Чтобы показать, как взаимодействовать с базой данных продуктов, вы получите данные из products таблицу, выполняя запрос к ней при получении запроса.
Замените существующий код в worker.ts файл следующим кодом:
import { Client } from "pg";
export default {
async fetch(request, env, ctx): Promise<Response> {
// Create a new Client instance using the connection string
// or explicit parameters as shown in the previous steps.
// Here, we are using the connection string method.
const sql = new Client({
connectionString: env.DB_URL,
});
// Connect to the PostgreSQL database
await sql.connect();
// Query the products table
const result = await sql.query("SELECT * FROM products");
// Return the result as JSON
return new Response(JSON.stringify(result.rows), {
headers: {
"Content-Type": "application/json",
},
});
},
} satisfies ExportedHandler<Env>;Этот код устанавливает соединение с базой данных PostgreSQL из приложения Worker и выполняет запрос к products таблицу и возвращает результаты в виде ответа JSON.
6. Разверните Worker
Выполните следующую команду, чтобы развернуть Worker:
npx wrangler deployВаше приложение теперь доступно по адресу <YOUR_WORKER>.<YOUR_SUBDOMAIN>.workers.dev.
После развёртывания вы можете взаимодействовать с базой данных продуктов PostgreSQL с помощью своего Cloudflare Worker. При каждом запросе к URL вашего Worker он будет получать данные из products таблицу и вернуть их в виде ответа JSON. Вы можете изменить запрос по своему усмотрению, чтобы получить нужные данные из базы данных продуктов.
7. Вставьте новую строку в базу данных продуктов
Чтобы вставить новую строку в products таблицу, создайте в своем Worker новую конечную точку API, которая обрабатывает POST запрос. Когда POST запрос получен с полезной нагрузкой JSON, Worker вставит новую строку в products таблицу указанными данными.
Предположим, products таблица содержит следующие столбцы: id, name, description, а также price.
Добавьте следующий фрагмент кода внутрь fetch обработчик события в вашем worker.ts файл, перед существующим кодом запроса:
import { Client } from "pg";
export default {
async fetch(request, env, ctx): Promise<Response> {
// Create a new Client instance using the connection string
// or explicit parameters as shown in the previous steps.
// Here, we are using the connection string method.
const sql = new Client({
connectionString: env.DB_URL,
});
// Connect to the PostgreSQL database
await sql.connect();
const url = new URL(request.url);
if (request.method === "POST" && url.pathname === "/products") {
// Parse the request's JSON payload
const productData = (await request.json()) as {
name: string;
description: string;
price: number;
};
const name = productData.name,
description = productData.description,
price = productData.price;
// Insert the new product into the products table
const insertResult = await sql.query(
`INSERT INTO products(name, description, price) VALUES($1, $2, $3)
RETURNING *`,
[name, description, price],
);
// Return the inserted row as JSON
return new Response(JSON.stringify(insertResult.rows), {
headers: { "Content-Type": "application/json" },
});
}
// Query the products table
const result = await sql.query("SELECT * FROM products");
// Return the result as JSON
return new Response(JSON.stringify(result.rows), {
headers: {
"Content-Type": "application/json",
},
});
},
} satisfies ExportedHandler<Env>;Этот фрагмент кода выполняет следующее:
- Проверяет, является ли запрос
POSTзапрос, а путь URL:/products. - Разбирает полезную нагрузку JSON из запроса.
- Создает
INSERTSQL-запрос с использованием предоставленных данных о продукте. - Выполняет запрос и добавляет новую строку в
productsв таблице. - Возвращает добавленную строку в виде JSON-ответа.
Теперь при отправке POST запрос по URL вашего Worker с /products путь и данные в формате JSON, Worker добавит новую строку в products таблицу указанными данными. Когда поступает запрос к / будет выполнен, Worker вернет все товары из базы данных.
После внесения этих изменений повторно разверните Worker, выполнив:
npx wrangler deployТеперь Cloudflare Worker можно использовать для добавления новых строк в products таблица. Чтобы проверить эту функциональность, отправьте POST запрос по URL вашего Worker с /products путь, а также данные в формате JSON, содержащие данные нового продукта:
{
"name": "Sample Product",
"description": "This is a sample product",
"price": 19.99
}Вы успешно создали Cloudflare Worker, который подключается к базе данных PostgreSQL, получает данные и добавляет новые строки в таблицу products.
8. Используйте Hyperdrive для ускорения запросов
Создайте конфигурацию Hyperdrive, используя строку подключения к вашей базе данных PostgreSQL.
npx wrangler hyperdrive create <NAME_OF_HYPERDRIVE_CONFIG> --connection-string="postgres://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name" --caching-disabledЭта команда выводит конфигурацию Hyperdrive id который будет использоваться для вашего Hyperdrive привязка. Настройте привязку, указав id в файле Wrangler.
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "hyperdrive-example",
"main": "src/index.ts",
// Set this to today's date
"compatibility_date": "2026-08-28",
"compatibility_flags": [
"nodejs_compat"
],
// Pasted from the output of `wrangler hyperdrive create <NAME_OF_HYPERDRIVE_CONFIG> --connection-string=[...]` above.
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "<ID OF THE CREATED HYPERDRIVE CONFIGURATION>"
}
]
}"$schema" = "./node_modules/wrangler/config-schema.json"
name = "hyperdrive-example"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-08-28"
compatibility_flags = [ "nodejs_compat" ]
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<ID OF THE CREATED HYPERDRIVE CONFIGURATION>"Создайте типы для привязки Hyperdrive с помощью следующей команды:
npx wrangler typesЗамените имеющуюся строку подключения в коде Worker на строку подключения Hyperdrive.
export default {
async fetch(request, env, ctx): Promise<Response> {
const sql = new Client({connectionString: env.HYPERDRIVE.connectionString})
const url = new URL(request.url);
//rest of the routes and database queries
},
} satisfies ExportedHandler<Env>;9. Повторно разверните Worker
Выполните следующую команду, чтобы развернуть Worker:
npx wrangler deployВаше приложение Worker теперь доступно по адресу <YOUR_WORKER>.<YOUR_SUBDOMAIN>.workers.dev, с помощью Hyperdrive. Hyperdrive ускоряет запросы к базе данных, объединяя соединения в пул и кешируя запросы по всему миру.
Следующие шаги
Чтобы узнать больше о работе с базами данных и Workers, см. Руководства и изучите Документация по базам данных.
Если у вас есть вопросы, нужна помощь или вы хотите поделиться своим проектом, присоединяйтесь к сообществу разработчиков Cloudflare на Discord ↗ чтобы пообщаться с другими разработчиками и командой Cloudflare.