Ir al contenido

Turso y Astro

Turso es una base de datos distribuida construida sobre libSQL, una bifurcación de SQLite. Está optimizada para baja latencia de consultas, lo que la hace adecuada para aplicaciones globales.

Inicializando Turso en Astro

Prerrequesitos

  • La CLI de Turso instalada y iniciada sesión
  • Una base de datos Turso con un esquema
  • URL de tu base de datos
  • Un Token de Aceso

Configura tus variables de entorno

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

turso db show <nombre-de-la-base-de-datos> --url

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

turso db tokens create <nombre-de-la-base-de-datos>

Agrega la salida de ambos comandos a tu archivo .env en la raíz de tu proyecto. Si este archivo no existe, crea uno.

TURSO_DATABASE_URL=libsql://...
TURSO_AUTH_TOKEN=

:::cautionNo utilizes el prefijo PUBLIC_ cuando estés creando estas variables de entorno privadas. Esto expondrá estos valores en el cliente.:::

Instala LibSQL Client

Instala @libsql/client para conectar Turso a Astro:

 npm install @libsql/client

Inicializa 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

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

Placeholders 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 única entrada de la tabla posts WHERE el slug es el valor obtenido de Astro.params, 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

Más guías de servicios backend

Contribuir Comunidad Patrocinador