使用 Supabase 与 Refine
了解如何创建一个 Supabase 项目,向你的数据库添加一些示例数据,并从 Refine 应用查询数据。
1# First, get your access token from https://supabase.org.cn/dashboard/account/tokens2export SUPABASE_ACCESS_TOKEN="your-access-token"34# List your organizations to get the organization ID5curl -H "Authorization: Bearer $SUPABASE_ACCESS_TOKEN" \6 https://api.supabase.com/v1/organizations78# Create a new project (replace <org-id> with your organization ID)9curl -X POST https://api.supabase.com/v1/projects \10 -H "Authorization: Bearer $SUPABASE_ACCESS_TOKEN" \11 -H "Content-Type: application/json" \12 -d '{13 "organization_id": "<org-id>",14 "name": "My Project",15 "region": "us-east-1",16 "db_pass": "<your-secure-password>"17 }'1-- Create the table2create table instruments (3 id bigint primary key generated always as identity,4 name text not null5);6-- Insert some sample data into the table7insert into instruments (name)8values9 ('violin'),10 ('viola'),11 ('cello');1213alter table instruments enable row level security;通过添加 RLS 策略使表格中的数据可公开读取
1create policy "public can read instruments"2on public.instruments3for select to anon4using (true);创建 Refine 应用
使用 Refine 的 create refine-app 创建一个 Refine 应用。
refine-supabase 预设添加了 @refinedev/supabase 辅助包,该包支持在 Refine 应用中使用 Supabase。@refinedev/supabase 开箱即用包含 Supabase 依赖项:supabase-js。
终端
1npm create refine-app@latest -- --preset refine-supabase my-app在 VS Code 中打开你的 Refine 应用
你将开发你的应用,连接到 Supabase 后端并在 VS Code 中运行 Refine 应用。
终端
1cd my-app2code .更新 `supabaseClient`
现在你需要使用你的 Supabase API 的 SUPABASE_URL 和 SUPABASE_KEY 更新 supabaseClient。supabaseClient 用于允许 Refine 应用连接到你的 Supabase 后端的身份验证提供程序和数据提供程序方法。
项目 URL
可发布密钥
匿名密钥
src/utility/supabaseClient.ts
1import { createClient } from "@refinedev/supabase";23const SUPABASE_URL = YOUR_SUPABASE_URL;4const SUPABASE_KEY = YOUR_SUPABASE_KEY56export const supabaseClient = createClient(SUPABASE_URL, SUPABASE_KEY, {7 db: {8 schema: "public",9 },10 auth: {11 persistSession: true,12 },13});你还可以从 项目的 连接 对话框 获取项目 URL 和密钥。
API 密钥的更改
Supabase 正在更改密钥的工作方式,以提高项目安全性和开发人员体验。您可以 阅读完整的公告,但在过渡期间,您可以使用当前的 anon 和 service_role 密钥以及新的可发布密钥,格式为 sb_publishable_xxx,它将取代旧的密钥。
在大多数情况下,你可以从 项目的 连接 对话框 获取正确的密钥,但如果你想要特定的密钥,你可以在 项目的设置页面的 API 密钥部分 找到所有密钥
- 对于旧版密钥,从 旧版 API 密钥 选项卡中复制
anon密钥用于客户端操作,并复制service_role密钥用于服务器端操作。 - 对于新密钥,打开 API 密钥 选项卡,如果您还没有可发布密钥,请单击 创建新的 API 密钥,并复制 可发布密钥 部分中的值。
阅读 API 密钥文档 以全面了解所有密钥类型及其用途。
添加 instruments 资源和页面
你必须配置资源并为 instruments 资源定义页面。
使用以下命令自动添加资源并使用 Refine Inferencer 为 instruments 生成页面代码。
这在 src/pages/instruments/ 目录中定义了 list、create、show 和 edit 操作的页面,并带有 <HeadlessInferencer /> 组件。
<HeadlessInferencer /> 组件依赖于 @refinedev/react-table 和 @refinedev/react-hook-form 包。为了避免错误,你应该使用 npm install @refinedev/react-table @refinedev/react-hook-form 将它们作为依赖项安装。
<HeadlessInferencer /> 是一个 Refine Inferencer 组件,可以自动生成 list、create、show 和 edit 页面所需的代码。
终端
1npm run refine create-resource instruments添加 instruments 页面的路由
添加 list、create、show 和 edit 页面的路由。
你应该删除用 <Welcome /> 组件呈现的欢迎页面的 index 路由。
src/App.tsx
1import { Refine } from "@refinedev/core";2import { RefineKbar, RefineKbarProvider } from "@refinedev/kbar";3import routerProvider, {4 DocumentTitleHandler,5 NavigateToResource,6 UnsavedChangesNotifier,7} from "@refinedev/react-router";8import { dataProvider, liveProvider } from "@refinedev/supabase";9import { BrowserRouter, Route, Routes } from "react-router-dom";1011import "./App.css";12import authProvider from "./authProvider";13import { supabaseClient } from "./utility";14import { InstrumentsCreate, InstrumentsEdit, InstrumentsList, InstrumentsShow } from "./pages/instruments";1516function App() {17 return (18 <BrowserRouter>19 <RefineKbarProvider>20 <Refine21 dataProvider={dataProvider(supabaseClient)}22 liveProvider={liveProvider(supabaseClient)}23 authProvider={authProvider}24 routerProvider={routerProvider}25 options={{26 syncWithLocation: true,27 warnWhenUnsavedChanges: true,28 }}29 resources={[{30 name: "instruments",31 list: "/instruments",32 create: "/instruments/create",33 edit: "/instruments/edit/:id",34 show: "/instruments/show/:id"35 }]}>36 <Routes>37 <Route index38 element={<NavigateToResource resource="instruments" />}39 />40 <Route path="/instruments">41 <Route index element={<InstrumentsList />} />42 <Route path="create" element={<InstrumentsCreate />} />43 <Route path="edit/:id" element={<InstrumentsEdit />} />44 <Route path="show/:id" element={<InstrumentsShow />} />45 </Route>46 </Routes>47 <RefineKbar />48 <UnsavedChangesNotifier />49 <DocumentTitleHandler />50 </Refine>51 </RefineKbarProvider>52 </BrowserRouter>53 );54}5556export default App;查看 instruments 页面
现在你应该能够沿着 /instruments 路由看到 instruments 页面。你现在可以使用 Inferencer 生成的 UI 编辑和添加新的 instruments。
Inferencer 自动生成的代码为你提供了一个良好的起点,可以继续构建你的 list、create、show 和 edit 页面。可以通过点击各自页面中的 显示自动生成的代码 按钮来获取它们。
