← Cloudflare Workers / workers / databases / third-party-integrations
Turso
Turso ↗ представляет собой распределённую базу данных, размещённую на edge-серверах и основанную на libSQL ↗, форк SQLite с открытым исходным кодом. Turso был разработан для минимизации задержки запросов в приложениях, где запросы могут поступать из любой точки мира.
Настройка интеграции с Turso
Чтобы настроить интеграцию с Turso:
-
Для создания и наполнения базы данных понадобится Turso CLI. Установите Turso CLI, выполнив в терминале одну из следующих двух команд:
# On macOS and linux with homebrew brew install tursodatabase/tap/turso # Manual scripted installation curl -sSfL https://get.tur.so/install.sh | bashЗатем выполните следующую команду, чтобы убедиться в том, что Turso CLI установлен:
turso --version -
Прежде чем создать первую базу данных Turso, необходимо авторизоваться с помощью учётной записи GitHub, выполнив команду:
turso auth loginWaiting for authentication... ✔ Success! Logged in as <YOUR_GITHUB_USERNAME>После аутентификации вы можете создать базу данных с помощью команды
turso db create <DATABASE_NAME>. Turso создаст базу данных и автоматически выберет ближайшее к вам местоположение.turso db create my-db# Example: Creating database my-db in Amsterdam, Netherlands (ams) # Once succeeded: Created database my-db in Amsterdam, Netherlands (ams) in 13 seconds.После создания первой базы данных к ней можно подключиться напрямую и выполнять SQL-запросы.
turso db shell my-db -
Скопируйте следующий SQL-запрос в только что открытую оболочку:
CREATE TABLE elements ( id INTEGER NOT NULL, elementName TEXT NOT NULL, atomicNumber INTEGER NOT NULL, symbol TEXT NOT NULL ); INSERT INTO elements (id, elementName, atomicNumber, symbol) VALUES (1, 'Hydrogen', 1, 'H'), (2, 'Helium', 2, 'He'), (3, 'Lithium', 3, 'Li'), (4, 'Beryllium', 4, 'Be'), (5, 'Boron', 5, 'B'), (6, 'Carbon', 6, 'C'), (7, 'Nitrogen', 7, 'N'), (8, 'Oxygen', 8, 'O'), (9, 'Fluorine', 9, 'F'), (10, 'Neon', 10, 'Ne'); -
Настройте учётные данные базы данных Turso в вашем Worker:
Добавьте URL базы данных Turso и токен аутентификации в качестве секретов вашего Worker. Сначала получите URL базы данных и создайте токен аутентификации:
# Get your database URL turso db show my-db --url # Create an authentication token turso db tokens create my-dbЗатем добавьте их в Worker в качестве секретов с помощью Wrangler:
# Add the database URL as a secret npx wrangler secret put TURSO_URL # When prompted, paste your database URL # Add the authentication token as a secret npx wrangler secret put TURSO_AUTH_TOKEN # When prompted, paste your authentication token -
В Worker установите клиентскую библиотеку Turso:
npm i @libsql/client -
Следующий пример показывает, как выполнить запрос к базе данных Turso из Worker. Учётные данные для подключения к Turso добавлены в качестве секреты в ваш Worker.
import { Client as LibsqlClient, createClient } from "@libsql/client/web"; export interface Env { TURSO_URL?: string; TURSO_AUTH_TOKEN?: string; } export default { async fetch(request, env, ctx): Promise<Response> { const client = buildLibsqlClient(env); try { const res = await client.execute("SELECT * FROM elements"); return new Response(JSON.stringify(res), { status: 200, headers: { "Content-Type": "application/json" }, }); } catch (error) { console.error("Error executing SQL query:", error); return new Response( JSON.stringify({ error: "Internal Server Error" }), { status: 500, }, ); } }, } satisfies ExportedHandler<Env>; function buildLibsqlClient(env: Env): LibsqlClient { const url = env.TURSO_URL?.trim(); if (url === undefined) { throw new Error("TURSO_URL env var is not defined"); } const authToken = env.TURSO_AUTH_TOKEN?.trim(); if (authToken == undefined) { throw new Error("TURSO_AUTH_TOKEN env var is not defined"); } return createClient({ url, authToken }); }- Импорт клиентской библиотеки libSQL
@libsql/client/webдолжен импортироваться именно так, как показано, при работе с Cloudflare Workers. Импорт, предназначенный не для веб среды, не будет работать в среде Workers. -
Envинтерфейс содержит переменная окружения и secret заданный при добавлении интеграции Turso на шаге 4. -
Envинтерфейс также кеширует объект клиента libSQL и маршрутизатор, которые были созданы при первом запросе к Worker. - Worker использует
buildLibsqlClientдля запроса кelementsбазу данных и возвращает ответ в виде объекта JSON.
- Импорт клиентской библиотеки libSQL
Настроив окружение и подготовив код, теперь можно протестировать Worker локально перед развертыванием.
Подробнее о Turso см. в Официальная документация Turso ↗.