Turso 和 Astro
Turso 是一个基于 libSQL(SQLite 的一个分支)构建的分布式数据库。它为低查询延迟进行了优化,使其适用于全球化应用。
在 Astro 中初始化 Turso
标题为“在 Astro 中初始化 Turso”的部分先决条件
标题为“先决条件”的部分配置环境变量
标题为“配置环境变量”的部分使用以下命令获取你的数据库 URL
turso db show <database-name> --url
为数据库创建一个认证令牌
turso db tokens create <database-name>
将上述两个命令的输出添加到项目根目录下的 .env
文件中。如果该文件不存在,请创建一个。
TURSO_DATABASE_URL=libsql://...TURSO_AUTH_TOKEN=
在创建这些私有环境变量时,不要使用 PUBLIC_
前缀。这会在客户端暴露这些值。
安装 LibSQL 客户端
标题为“安装 LibSQL 客户端”的部分安装 @libsql/client
以将 Turso 连接到 Astro
npm install @libsql/client
pnpm add @libsql/client
yarn add @libsql/client
初始化新客户端
标题为“初始化新客户端”的部分在 src
文件夹中创建一个文件 turso.ts
并调用 createClient
,向其传递 TURSO_DATABASE_URL
和 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,});
查询你的数据库
标题为“查询你的数据库”的部分要从数据库访问信息,请在任何 .astro
组件内导入 turso
并执行 SQL 查询。
以下示例从你的表中获取所有 posts
,然后在 <BlogIndex />
组件中显示标题列表
---import { turso } from '../turso'
const { rows } = await turso.execute('SELECT * FROM posts')---
<ul> {rows.map((post) => ( <li>{post.title}</li> ))}</ul>
SQL 占位符
标题为“SQL 占位符”的部分execute()
方法可以接受一个对象,用于将变量(如 slug
或分页信息)传递给 SQL 语句。
以下示例从 posts
表中获取一个条目,其 slug
是从 Astro.params
中检索到的值,然后显示该文章的标题。
---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>