On this page
将数据库连接到您的本地开发环境
在本教程中,我们将展示如何使用 Deno 的隧道功能和 Deno Deploy,将数据库连接到本地开发服务器。这样,您可以在本地环境中轻松操作数据库,而无需复杂的配置。
设置应用程序 Jump to heading
如果您还没有本地服务器应用,可以使用 Svelte 创建一个简单的应用。在本教程中,我们将用 Svelte 创建一个基础的笔记应用:
npx sv create svelte-app
选择默认选项完成提示,然后进入新项目目录:
cd svelte-app
deno run dev
安装 Postgres 驱动及类型定义 Jump to heading
要连接到 Postgres 数据库,我们将使用流行的 pg 客户端。使用 npm 规范安装 pg 包及其类型定义:
deno add npm:pg npm:@types/pg
这会将必要的依赖添加到您的 deno.json 文件中。
创建数据库迁移脚本 Jump to heading
接下来,在项目目录中新建一个名为 migrate.ts 的文件。该脚本将连接到 Postgres 数据库并创建示例表。
import { Client } from "pg";
const client = new Client();
await client.connect();
await client.query(
`CREATE TABLE IF NOT EXISTS notes (id SERIAL PRIMARY KEY, note TEXT)`,
);
await client.query(
`INSERT INTO notes (note) VALUES ('hello, this is seed data')`,
);
await client.end();
配置 Vite 以允许隧道连接 Jump to heading
Svelte 使用的 Vite 服务器默认仅允许 localhost 访问,为了让其更广泛地可用,我们需要对 vite.config.js 文件做些小修改。打开 vite.config.js,添加一个 server 配置项,设置 allowedHosts: true:
import { sveltekit } from "@sveltejs/kit/vite";
import { defineConfig } from "vite";
export default defineConfig({
plugins: [sveltekit()],
server: {
allowedHosts: true,
},
});
将应用部署到 Deno Deploy Jump to heading
接着,我们使用 deno deploy 子命令将 Svelte 应用部署到 Deno Deploy。这将帮我们设置一个项目,供后续连接数据库。
在终端运行:
deno deploy
按照终端提示,创建新的 Deno Deploy 应用,您可能需要登录 Deno Deploy 控制台,若属于多个组织,请选择一个并为该项目创建应用。
在 Deno Deploy 上配置数据库 Jump to heading
现在是为应用配置数据库的时候了。登录您的 Deno Deploy 控制台,点击 Databases(数据库)标签页。然后:
- 点击 + Provision database(添加数据库)按钮。
- 选择 Prisma Postgres 数据库,点击 Provision。
- 输入数据库名称缩写(例如
my-test-db)。 - 选择最接近您用户的地区。
- 点击 Provision database。
数据库配置完成后,在数据库标签页点击所创建的数据库,您可以将其分配给刚部署的应用。点击 Assign 按钮,从下拉菜单中选择您的应用。
点击数据库名称,您可以看到配置页面,列出已分配应用及三个数据库“上下文”,分别对应不同环境(本地、预览、生产)。这些上下文使您可以在不影响生产数据的情况下测试数据库连接。
运行迁移脚本 Jump to heading
数据库配置完成后,运行迁移脚本以创建示例表。可以直接使用 --tunnel 标志:
deno run --tunnel -A migrate.ts
这会自动获取数据库连接信息,并针对本地数据库上下文执行迁移脚本。
您可以通过 Deno Deploy 控制台内置的数据库浏览器确认表和种子数据是否创建。进入您的数据库页面,点击本地数据库上下文中的 Explore 按钮,应看到一张包含一条数据的表。
在应用中显示数据库数据 Jump to heading
接下来,更新 Svelte 应用以展示数据库数据。打开 src/routes/+page.svelte 文件,更新代码以从数据库获取笔记。
import { Client } from "pg";
export const load = async () => {
const client = new Client();
await client.connect();
const res = await client.query(` SELECT note from notes; `);
await client.end();
return { notes: res.rows };
};
然后更新 HTML 部分以显示笔记:
Welcome to SvelteKit
{#each data.notes as row}
- {row.note}
{/each}
使用隧道运行您的应用 Jump to heading
现在,您可以使用 --tunnel 标志本地运行 Svelte 应用并查看本地数据库上下文中的数据:
deno run --tunnel dev
您应该能看到一个简单网页,显示种子数据。
使用预部署命令运行数据库迁移 Jump to heading
每次部署到 Deno Deploy 时,不希望手动运行迁移脚本,而是希望自动在每次部署前运行数据库迁移。
在 Deno Deploy 控制台编辑应用配置,添加一个预部署命令,在每次部署前自动运行迁移脚本。
步骤:
- 进入 Deno Deploy 项目仪表盘。
- 点击 Settings(设置)标签页。
- 滚动到 App Configuration(应用配置)区域,点击 Edit(编辑)按钮。
- 在 Pre-deploy Command 字段中输入以下命令:
deno run -A migrate.ts
现在每次部署应用前,迁移脚本会先行运行,确保数据库模式保持最新。
您可以通过以下命令测试:
deno deploy --prod
直接部署到生产环境。部署完成后,您可以在 Deno Deploy 控制台中浏览生产数据库上下文,确认表已被创建且种子数据已插入。
更新数据库中的数据 Jump to heading
您现在可以通过 Deno Deploy 控制台内置的数据库浏览器更新数据库中的数据(或通过更新迁移脚本并运行它)。在数据库浏览器中点击 notes 表,编辑文本并保存。刷新包含 Svelte 应用的标签页,即可查看更新后的数据。
可以尝试分别在本地、预览和生产数据库上下文中更新数据,观察它们如何彼此独立。
🦕 现在,您已经可以通过隧道功能将数据库连接到本地开发环境,实现使用真实数据开发和测试应用,而无须复杂配置!