Turso y Astro
Turso es una base de datos distribuida construida sobre libSQL, un fork de SQLite. Está optimizada para una baja latencia de consulta, lo que la hace adecuada para aplicaciones globales.
Inicializando Turso en Astro
Sección titulada “Inicializando Turso en Astro”Requisitos previos
Sección titulada “Requisitos previos”- El CLI de Turso instalado y con sesión iniciada
- Una base de datos de Turso con esquema
- La URL de tu base de datos
- Un token de acceso
Configurar variables de entorno
Sección titulada “Configurar variables de entorno”Obtén la URL de tu base de datos usando el siguiente comando:
turso db show <database-name> --urlCrea un token de autenticación para la base de datos:
turso db tokens create <database-name>Añade la salida de ambos comandos anteriores en tu archivo .env en la raíz de tu proyecto. Si este archivo no existe, crea uno.
TURSO_DATABASE_URL=libsql://...TURSO_AUTH_TOKEN=No utilices el prefijo PUBLIC_ al crear estas variables de entorno privadas. Esto expondría estos valores en el cliente.
Instalar el cliente de LibSQL
Sección titulada “Instalar el cliente de LibSQL”Instala el paquete @libsql/client para conectar Turso a Astro:
npm install @libsql/clientpnpm add @libsql/clientyarn add @libsql/clientInicializar un nuevo cliente
Sección titulada “Inicializar un nuevo cliente”Crea un archivo turso.ts en la carpeta src e invoca createClient, pasándole TURSO_DATABASE_URL y 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,});Consultando tu base de datos
Sección titulada “Consultando tu base de datos”Para acceder a la información de tu base de datos, importa turso y ejecuta una consulta SQL dentro de cualquier componente .astro.
El siguiente ejemplo obtiene todos los posts de tu tabla y luego muestra una lista de títulos en un componente <BlogIndex />:
---import { turso } from '../turso'
const { rows } = await turso.execute('SELECT * FROM posts')---
<ul> {rows.map((post) => ( <li>{post.title}</li> ))}</ul>Marcadores de posición SQL
Sección titulada “Marcadores de posición SQL”El método execute() puede tomar un objeto para pasar variables a la sentencia SQL, como slug, o paginación.
El siguiente ejemplo obtiene una sola entrada de la tabla posts WHERE el slug es el valor obtenido de Astro.params, y luego muestra el título de la publicación.
---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>Recursos de Turso
Sección titulada “Recursos de Turso”- Documentación de Turso
- Turso en GitHub
- Uso de Turso para servir el contenido de un blog de Astro renderizado en el lado del servidor