这些已安装的软件包仅用于在创建表、设置 Drizzle 配置文件和将更改应用到数据库步骤中创建数据库表。这些软件包不影响在 Netlify Edge Functions 中运行的代码。我们将使用 import_map.json
来导入 Edge Functions 所需的软件包。
Drizzle ORM - Drizzle 与 Netlify Edge Functions 和 Supabase 数据库
本教程演示了如何将 Drizzle ORM 与 Netlify Edge Functions 和 Supabase 数据库 一起使用。
- 您应该安装最新版本的 Netlify CLI。
- 您应该已经安装了 Drizzle ORM 和 Drizzle Kit。您可以通过运行以下命令来完成此操作:
npm i drizzle-orm
npm i -D drizzle-kit
- 您应该已经安装了
dotenv
包用于管理环境变量。如果使用 Node.jsv20.6.0
或更高版本,则无需安装,因为 Node.js 原生支持.env
文件。有关更多信息,请参阅此处。
npm i dotenv
- (可选)您可以安装
@netlify/edge-functions
包,以便导入稍后将使用的Context
对象的类型。
npm i @netlify/edge-functions
创建新的 Supabase 项目
您可以在 仪表板 中创建新的 Supabase 项目,或通过此链接创建。
设置连接字符串变量
您可以通过点击仪表板顶部栏中的 连接 来找到 项目连接详情
,并从 事务池
部分复制 URI。请记住用您实际的数据库密码替换密码占位符。
将 DATABASE_URL
变量添加到您的 .env
文件中。
DATABASE_URL=<YOUR_DATABASE_URL>
有关连接到 Supabase 数据库的更多信息,请参阅文档。
设置 Netlify Edge Functions
在项目根目录中创建 netlify/edge-functions
目录。您的 Edge Functions 将存储在此处。
在 netlify/edge-functions
目录中创建函数 user.ts
。
import type { Context } from "@netlify/edge-functions";
export default async (request: Request, context: Context) => {
return new Response("User data");
};
Request
和 Response
对象的类型在全局作用域内。
设置导入
在项目根目录创建 import_map.json
文件并添加以下内容:
{
"imports": {
"drizzle-orm/": "https://esm.sh/drizzle-orm/",
"postgres": "https://esm.sh/postgres"
}
}
有关 Netlify Edge Functions 中 import_map.json
的更多信息,请参阅此处。
创建 Netlify 配置文件
在项目根目录创建 netlify.toml
文件并添加以下内容:
[functions]
deno_import_map = "./import_map.json"
[[edge_functions]]
path = "/user"
function = "user"
此配置告诉 Netlify 将 import_map.json
文件用于 Deno 导入,并将对 /user
路径的请求路由到 user.ts
函数。有关 netlify.toml
的更多信息,请参阅此处。
创建表
在 netlify/edge-functions/common
目录中创建一个 schema.ts
文件并声明表结构
import { pgTable, serial, text, integer } from "drizzle-orm/pg-core";
export const usersTable = pgTable('users_table', {
id: serial('id').primaryKey(),
name: text('name').notNull(),
age: integer('age').notNull(),
email: text('email').notNull().unique(),
})
设置 Drizzle 配置文件
Drizzle config - 由 Drizzle Kit 使用的配置文件,包含有关你的数据库连接、迁移文件夹和 schema 文件的所有信息。
在项目的根目录中创建 drizzle.config.ts
文件并添加以下内容
import 'dotenv/config'; // remove this line if you use Node.js v20.6.0 or later
import type { Config } from "drizzle-kit";
export default {
schema: './netlify/edge-functions/common/schema.ts',
out: './drizzle',
dialect: 'postgresql',
dbCredentials: {
url: process.env.DATABASE_URL!,
},
} satisfies Config;
在本教程中,我们将使用 Drizzle kit 将更改推送到 Neon 数据库。
将更改应用于数据库
npx drizzle-kit push
或者,您可以使用迁移工作流。有关更多信息,请参阅:迁移。
将 Drizzle ORM 连接到您的数据库
更新您的 netlify/edge-functions/user.ts
文件并设置您的数据库配置
import type { Context } from "@netlify/edge-functions";
import { usersTable } from "./common/schema.ts";
import { drizzle } from 'drizzle-orm/postgres-js';
import postgres from 'postgres';
export default async (request: Request, context: Context) => {
const queryClient = postgres(Netlify.env.get("DATABASE_URL")!);
const db = drizzle({ client: queryClient });
const users = await db.select().from(usersTable);
return new Response(JSON.stringify(users));
};
如果您使用 VS Code,可能会在导入下方看到红色下划线。Edge 函数仍然会执行。要消除红色下划线,您可以在下一步中配置 VS Code 以使用 Edge 函数。
在本地测试您的代码
运行以下命令启动 Netlify 开发服务器
netlify dev
当您第一次运行该命令时,它会建议配置 VS Code 以使用 Edge Functions。点击 Yes
进行配置。settings.json
文件将在 .vscode
目录中创建。如果您仍然看到红色下划线,可以重启 Deno 语言服务器。
打开浏览器并导航到路由 /user
。您应该会看到从 Neon 数据库返回的用户数据
[]
如果您尚未向 users_table
表添加任何数据,它可能是一个空数组。
初始化一个新的 Netlify 项目
运行以下命令以初始化一个新的 Netlify 项目
netlify init
在 CLI 中回答问题以创建新的 Netlify 项目。在本教程中,我们将选择 Yes, create and deploy site manually
-> <YOUR_TEAM>
-> <SITE_NAME>
。
设置 Netlify 环境变量
运行以下命令将环境变量导入到 Netlify 中
netlify env:import .env
有关 Netlify 环境变量的更多信息,请参阅此处。
部署您的项目
运行以下命令部署您的项目
netlify deploy
按照 CLI 中的说明将您的项目部署到 Netlify。在本教程中,我们的发布目录是 '.'
。
默认情况下是草稿部署。要进行生产部署,请运行以下命令:
netlify deploy --prod
最后,您可以使用已部署网站的 URL 并导航到您创建的路由(例如 /user
)来访问您的边缘函数。