Saltar al contenido

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.

  • 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

Obtén la URL de tu base de datos usando el siguiente comando:

Ventana de la terminal
turso db show <database-name> --url

Crea un token de autenticación para la base de datos:

Ventana de la terminal
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.

.env
TURSO_DATABASE_URL=libsql://...
TURSO_AUTH_TOKEN=

Instala el paquete @libsql/client para conectar Turso a Astro:

Ventana de la terminal
npm install @libsql/client

Crea un archivo turso.ts en la carpeta src e invoca createClient, pasándole TURSO_DATABASE_URL y TURSO_AUTH_TOKEN:

src/turso.ts
import { createClient } from "@libsql/client/web";
export const turso = createClient({
url: import.meta.env.TURSO_DATABASE_URL,
authToken: import.meta.env.TURSO_AUTH_TOKEN,
});

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 />:

src/components/BlogIndex.astro
---
import { turso } from '../turso'
const { rows } = await turso.execute('SELECT * FROM posts')
---
<ul>
{rows.map((post) => (
<li>{post.title}</li>
))}
</ul>

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.

src/pages/index.astro
---
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>

Más guías de servicios de backend

Contribuir Comunidad Patrocinar