Skip to main content
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 数据库并创建示例表。

migrate.ts
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

vite.config.js
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(数据库)标签页。然后:

  1. 点击 + Provision database(添加数据库)按钮。
  2. 选择 Prisma Postgres 数据库,点击 Provision
  3. 输入数据库名称缩写(例如 my-test-db)。
  4. 选择最接近您用户的地区。
  5. 点击 Provision database

数据库配置完成后,在数据库标签页点击所创建的数据库,您可以将其分配给刚部署的应用。点击 Assign 按钮,从下拉菜单中选择您的应用。

点击数据库名称,您可以看到配置页面,列出已分配应用及三个数据库“上下文”,分别对应不同环境(本地、预览、生产)。这些上下文使您可以在不影响生产数据的情况下测试数据库连接。

运行迁移脚本 Jump to heading

数据库配置完成后,运行迁移脚本以创建示例表。可以直接使用 --tunnel 标志:

deno run --tunnel -A migrate.ts

这会自动获取数据库连接信息,并针对本地数据库上下文执行迁移脚本。

您可以通过 Deno Deploy 控制台内置的数据库浏览器确认表和种子数据是否创建。进入您的数据库页面,点击本地数据库上下文中的 Explore 按钮,应看到一张包含一条数据的表。

在应用中显示数据库数据 Jump to heading

接下来,更新 Svelte 应用以展示数据库数据。打开 src/routes/+page.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 部分以显示笔记:

src/routes/+page.svelte

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 控制台编辑应用配置,添加一个预部署命令,在每次部署前自动运行迁移脚本。

步骤:

  1. 进入 Deno Deploy 项目仪表盘。
  2. 点击 Settings(设置)标签页。
  3. 滚动到 App Configuration(应用配置)区域,点击 Edit(编辑)按钮。
  4. Pre-deploy Command 字段中输入以下命令:
deno run -A migrate.ts

现在每次部署应用前,迁移脚本会先行运行,确保数据库模式保持最新。

您可以通过以下命令测试:

deno deploy --prod

直接部署到生产环境。部署完成后,您可以在 Deno Deploy 控制台中浏览生产数据库上下文,确认表已被创建且种子数据已插入。

更新数据库中的数据 Jump to heading

您现在可以通过 Deno Deploy 控制台内置的数据库浏览器更新数据库中的数据(或通过更新迁移脚本并运行它)。在数据库浏览器中点击 notes 表,编辑文本并保存。刷新包含 Svelte 应用的标签页,即可查看更新后的数据。

可以尝试分别在本地、预览和生产数据库上下文中更新数据,观察它们如何彼此独立。

🦕 现在,您已经可以通过隧道功能将数据库连接到本地开发环境,实现使用真实数据开发和测试应用,而无须复杂配置!

你找到了你需要的东西吗?

编辑此页面
隐私政策