Turso и Astro
Turso — это распределенная база данных, построенная на libSQL, форке SQLite. Она оптимизирована для низкой задержки запросов, что делает ее подходящей для глобальных приложений.
Инициализация Turso в Astro
Заголовок раздела Инициализация Turso в AstroПредварительные условия
Заголовок раздела Предварительные условия- Установленный и авторизированный Turso CLI
- База данных Turso со схемой
- URL вашей базы данных
- Токен доступа
Настройте переменные окружения
Заголовок раздела Настройте переменные окруженияПолучите URL вашей базы данных с помощью следующей команды:
turso db show <database-name> --urlСоздайте токен аутентификации для базы данных:
turso db tokens create <database-name>Добавьте результаты выполнения обеих команд в файл .env в корне проекта. Если этот файл не существует, создайте его.
TURSO_DATABASE_URL=libsql://...TURSO_AUTH_TOKEN=Не используйте префикс PUBLIC_ при создании этих приватных переменных окружения. Это приведет к раскрытию этих значений на клиенте.
Установка клиента LibSQL
Заголовок раздела Установка клиента LibSQLУстановите @libsql/client для подключения Turso к Astro:
npm install @libsql/clientpnpm add @libsql/clientyarn add @libsql/clientИнициализация нового клиента
Заголовок раздела Инициализация нового клиентаСоздайте файл turso.ts в папке src и вызовите createClient, передав ему TURSO_DATABASE_URL и TURSO_AUTH_TOKEN:
import { createClient } from "@libsql/client/web";
export const turso = createClient({ url: import.meta.env.TURSO_DATABASE_URL, authToken: import.meta.env.TURSO_AUTH_TOKEN,});Запрос к вашей базе данных
Заголовок раздела Запрос к вашей базе данныхЧтобы получить доступ к информации из вашей базы данных, импортируйте turso и выполните SQL-запрос внутри любого компонента .astro.
Следующий пример извлекает все posts из вашей таблицы, а затем выводит список заголовков в компоненте <BlogIndex />:
---import { turso } from '../turso'
const { rows } = await turso.execute('SELECT * FROM posts')---
<ul> {rows.map((post) => ( <li>{post.title}</li> ))}</ul>SQL Заполнители
Заголовок раздела SQL ЗаполнителиМетод execute() может принимать объект для передачи переменных в SQL-запрос, например, slug или пагинацию.
Следующий пример извлекает одну запись из таблицы posts, где slug - это значение, полученное из Astro.params, а затем отображает заголовок сообщения.
---import { turso } from '../turso'
const { slug } = Astro.params
const { rows } = await turso.execute({ sql: 'SELECT * FROM posts WHERE slug = ?', args: [slug!]})---
<h1>{rows[0].title}</h1>Ресурсы Turso
Заголовок раздела Ресурсы Turso- Turso Docs
- Turso on GitHub
- Использование Turso для обслуживания содержимого блога Astro с рендерингом на стороне сервера