Pular para o conteúdo

Turso & Astro

Turso é um banco de dados distribuído construído com libSQL, um fork do SQLite. Ele é otimizado para baixa latência de consulta, tornando-o adequado para aplicações globais.

  • CLI Turso instalada e autenticada
  • Um banco de dados com esquema Turso
  • A URL do seu banco de dados
  • Um token de acesso

Obtenha a URL do seu banco de dados usando o seguinte comando:

Janela do terminal
turso db show <database-name> --url

Crie um token de autenticação para o banco de dados:

Janela do terminal
turso db tokens create <database-name>

Adicione a saída de ambos os comandos acima em seu arquivo .env na raiz do projeto. Se esse arquivo não existir, crie um.

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

Instale o @libsql/client para conectar Turso ao Astro:

Janela do terminal
npm install @libsql/client

Crie um arquivo turso.ts na pasta src e invoque createClient, passando TURSO_DATABASE_URL e 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 acessar informações do seu banco de dados, importe turso e execute uma consulta SQL dentro de qualquer componente .astro.

O exemplo a seguir busca todos os posts da sua tabela e exibe uma lista de títulos em um 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>

O método execute() pode aceitar um objeto para passar variáveis para a declaração SQL, como slug ou paginação.

O exemplo a seguir busca uma única entrada na tabela posts onde (WHERE) o slug é o valor obtido de Astro.params, e então exibe o título da postagem.

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>

More backend service guides

Contribute

What’s on your mind?

Create GitHub Issue

Quickest way to alert our team of a problem.

Community