开发 Supabase 后端服务
了解如何在 EasyAppSupabase 项目中开发 Supabase 后端服务
以下属于进阶内容
本地开发环境设置
启动本地 Supabase 服务
在 EasyAppSupabase 目录下运行:
cd EasyAppSupabase
npx supabase start在下载 Docker 镜像之前,推荐您安装 Docker Desktop
第一次运行时会下载 Docker 镜像,可能需要几分钟时间。
查看服务状态
npx supabase status
这会显示所有服务的 URL 和密钥,包括:
- API URL:
http://localhost:54321 - Database URL:
postgresql://postgres:[PASSWORD]@localhost:54322/postgres - Secret key: 用于客户端请求
然后将 API URL 和 Secret key 添加到 EasyAppSwiftUI/Constants/Constants.swift 文件中。
enum Supabase {
/// Development supabase url
#if DEBUG
static let url = "http://localhost:54321"
/// The anon key
static let key ="your_anon_key_here"
#else
}开发 Edge Function
SupabaseEdgeFunction 项目已经内置了 easyapp 模板中所需的所有 Edge Function,您可以参考这些函数来创建您自己的函数。
使用 CLI 生成函数
npx supabase functions new my-function这会在 supabase/functions/my-function/ 目录下创建一个基础模板:
// supabase/functions/my-function/index.ts
import "jsr:@supabase/functions-js/edge-runtime.d.ts"
Deno.serve(async (req) => {
const { name } = await req.json()
const data = {
message: `Hello ${name}!`,
}
return new Response(
JSON.stringify(data),
{ headers: { "Content-Type": "application/json" } },
)
})配置依赖
创建 deno.json 文件来管理依赖:
{
"imports": {
"@supabase/supabase-js": "jsr:@supabase/supabase-js@^2.50.2",
"@openai/openai": "jsr:@openai/openai@^5.8.1"
}
}访问环境变量
在您的函数中,可以通过 Deno.env.get() 访问环境变量:
// 获取环境变量
const apiKey = Deno.env.get("OPENAI_API_KEY")
const customVar = Deno.env.get("YOUR_CUSTOM_VARIABLE")使用共享工具
EasyAppSupabase 提供了预配置的共享工具,可以直接在您的函数中使用:
使用 Supabase 客户端
import {
supabaseServiceRoleKey,
supabaseUrl,
} from "../_shared/SupabaseClient.ts";
Deno.serve(async (req) => {
const supabaseClient = createClient(
supabaseUrl,
supabaseServiceRoleKey,
);
// 获取用户认证信息
const authHeader = req.headers.get("Authorization");
if (!authHeader) {
return new Response("Unauthorized", { status: 401 });
}
const token = authHeader.replace("Bearer ", "");
const { data: user } = await supabaseClient.auth.getUser(token);
if (!user) {
return new Response("Invalid token", { status: 401 });
}
// 数据库操作
const { data, error } = await supabaseClient
.from('your_table')
.select('*')
.eq('user_id', user.user.id);
return new Response(JSON.stringify(data), {
headers: { "Content-Type": "application/json" }
});
});使用 OpenAI 客户端
import { openAIClient } from "../_shared/OpenAIClient.ts";
import { createClient } from "@supabase/supabase-js";
Deno.serve(async (req) => {
const { prompt } = await req.json();
const response = await openAIClient.chat.completions.create({
model: "gpt-3.5-turbo",
messages: [{ role: "user", content: prompt }],
});
return new Response(JSON.stringify({
result: response.choices[0].message.content
}), {
headers: { "Content-Type": "application/json" }
});
});本地测试
配置环境变量
在 supabase/.env.local 文件中配置您的环境变量:
# supabase/.env.local
# OpenAI
OPENAI_API_KEY=your_openai_api_key_here
# Supabase
# supabase 本地开发使用 LOCAL_DEV 前缀
LOCAL_DEV_SUPABASE_URL=http://127.0.0.1:54321
LOCAL_DEV_SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key_here
# 其他环境变量LOCAL_DEV_SUPABASE_SERVICE_ROLE_KEY 可以从这里获取

配置数据库表
- 创建新的迁移文件:
npx supabase migration new your_migration_name-
编辑生成的 SQL 文件在
supabase/migrations/ -
应用迁移:
npx supabase db push启动函数服务
# 启动特定函数并加载环境变量
npx supabase functions serve my-function --env-file ./supabase/.env.local
# 启动所有函数并加载环境变量
npx supabase functions serve --env-file ./supabase/.env.local函数将在 http://localhost:54321/functions/v1/my-function 运行。
测试函数
使用 curl 测试您的函数:
# 获取本地 anon key
npx supabase status
# 测试函数
curl -i --location --request POST 'http://localhost:54321/functions/v1/my-function' \
--header 'Authorization: Bearer YOUR_LOCAL_ANON_KEY' \
--header 'Content-Type: application/json' \
--data '{"name":"World"}'查看日志
函数的日志会实时显示在终端中,帮助您调试问题。
最佳实践
安全性
- 始终验证用户身份(除非是公开的 Webhook)
- 使用环境变量存储敏感信息(API 密钥、数据库连接字符串等)
- 实施适当的错误处理
故障排除
常见问题
函数无法启动
- 确保 Docker 正在运行
- 运行
supabase stop然后supabase start重启服务
端口冲突
- 检查
supabase status查看占用的端口 - 停止其他 Supabase 实例
部署失败
- 检查函数代码语法
- 确保所有依赖项都正确配置
- 验证环境变量设置
环境变量无法读取
- 确保
.env.local文件格式正确(KEY=value) - 启动函数时使用
--env-file参数 - 检查环境变量名称是否拼写正确
查看日志
# 查看函数日志
npx supabase functions logs my-function
# 实时查看日志
npx supabase functions logs my-function --follow通过本指南,您应该能够成功地在 EasyAppSupabase 项目中创建、测试和部署 Supabase 云函数s。
要学习更多 Supabase 云函数 相关知识,请参考 Supabase 云函数 官方文档
Last updated on