Turso ↗ 是一款基于 libSQL ↗(SQLite 的开源分支)的边缘托管分布式数据库。Turso 专为查询可能来自全球任意位置的应用而设计,以最小化查询延迟。
要设置 Turso 集成:
-
你需要安装 Turso CLI 来创建和填充数据库。在终端中使用以下两条命令之一安装 Turso CLI:
# On macOS and linux with homebrew brew install tursodatabase/tap/turso # Manual scripted installation curl -sSfL https://get.tur.so/install.sh | bash接下来,运行以下命令确认 Turso CLI 已安装:
turso --version -
在创建第一个 Turso 数据库之前,你需要通过运行以下命令使用 GitHub 账户进行身份验证:
turso auth loginWaiting for authentication... ✔ Success! Logged in as <YOUR_GITHUB_USERNAME>完成身份验证后,可以使用
turso db create <DATABASE_NAME>命令创建数据库。Turso 会创建数据库并自动选择离你最近的位置。turso db create my-db# Example: Creating database my-db in Amsterdam, Netherlands (ams) # Once succeeded: Created database my-db in Amsterdam, Netherlands (ams) in 13 seconds.创建第一个数据库后,你现在可以直接连接并执行 SQL 查询。
turso db shell my-db -
将以下 SQL 查询复制到你刚打开的 shell 中:
CREATE TABLE elements ( id INTEGER NOT NULL, elementName TEXT NOT NULL, atomicNumber INTEGER NOT NULL, symbol TEXT NOT NULL ); INSERT INTO elements (id, elementName, atomicNumber, symbol) VALUES (1, 'Hydrogen', 1, 'H'), (2, 'Helium', 2, 'He'), (3, 'Lithium', 3, 'Li'), (4, 'Beryllium', 4, 'Be'), (5, 'Boron', 5, 'B'), (6, 'Carbon', 6, 'C'), (7, 'Nitrogen', 7, 'N'), (8, 'Oxygen', 8, 'O'), (9, 'Fluorine', 9, 'F'), (10, 'Neon', 10, 'Ne'); -
在 Worker 中配置 Turso 数据库凭据:
你需要将 Turso 数据库 URL 和身份验证令牌作为 secret 添加到 Worker。首先,获取数据库 URL 并创建身份验证令牌:
# Get your database URL turso db show my-db --url # Create an authentication token turso db tokens create my-db然后使用 Wrangler 将这些值添加为 secret:
# Add the database URL as a secret npx wrangler secret put TURSO_URL # When prompted, paste your database URL # Add the authentication token as a secret npx wrangler secret put TURSO_AUTH_TOKEN # When prompted, paste your authentication token -
在 Worker 中安装 Turso 客户端库:
npm i @libsql/clientyarn add @libsql/clientpnpm add @libsql/clientbun add @libsql/client -
以下示例展示如何在 Worker 中查询 Turso 数据库。连接 Turso 所需的凭据已作为 secrets 添加到 Worker。
import { Client as LibsqlClient, createClient } from "@libsql/client/web"; export interface Env { TURSO_URL?: string; TURSO_AUTH_TOKEN?: string; } export default { async fetch(request, env, ctx): Promise<Response> { const client = buildLibsqlClient(env); try { const res = await client.execute("SELECT * FROM elements"); return new Response(JSON.stringify(res), { status: 200, headers: { "Content-Type": "application/json" }, }); } catch (error) { console.error("Error executing SQL query:", error); return new Response( JSON.stringify({ error: "Internal Server Error" }), { status: 500, }, ); } }, } satisfies ExportedHandler<Env>; function buildLibsqlClient(env: Env): LibsqlClient { const url = env.TURSO_URL?.trim(); if (url === undefined) { throw new Error("TURSO_URL env var is not defined"); } const authToken = env.TURSO_AUTH_TOKEN?.trim(); if (authToken == undefined) { throw new Error("TURSO_AUTH_TOKEN env var is not defined"); } return createClient({ url, authToken }); }
环境配置完成且代码就绪后,你现在可以在部署前本地测试 Worker。
要了解更多关于 Turso 的信息,请参阅 Turso 官方文档 ↗。