Aller au contenu

Turso & Astro

Turso est une base de données distribuée construite sur libSQL, un fork de SQLite. Elle est optimisée pour une faible latence de requête, la rendant adaptée aux applications globales.

  • Turso CLI installé et connecté
  • Une base de données Turso avec un schéma
  • Votre URL de base de données
  • Un jeton d’accès

Configuration des variables d’environnement

Titre de la section Configuration des variables d’environnement

Obtenez votre URL de base de données avec la commande suivante :

Fenêtre de terminal
turso db show <nom-de-base-de-données> --url

Création d’un token d’authentification pour la base de données :

Fenêtre de terminal
turso db tokens create <nom-base-de-données>

Ajoutez le résultat des deux commandes ci-dessus dans votre fichier .env à la racine de votre projet. Si ce fichier n’existe pas, créez-le.

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

Installez @libsql/client pour connecter Turso à Astro :

Fenêtre de terminal
npm install @libsql/client

Créez un fichier turso.ts dans le dossier src et appelez createClient, en lui passant TURSO_DATABASE_URL et 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,
});

Pour accéder aux informations de votre base de données, importez turso et exécutez une requête SQL à l’intérieur de n’importe quel composant .astro.

L’exemple suivant récupère tous les articles de votre table, puis affiche une liste de titres dans un composant <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>

La méthode execute() peut prendre un objet pour passer des variables à l’instruction SQL, tel que le slug ou la pagination.

L’exemple suivant récupère une seule entrée de la table posts WHERE le slug est la valeur récupérée depuis Astro.params, puis affiche le titre de l’article.

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>

Plus de guides sur les services backend