当前位置: 首页 > ai >正文

Supabase快速入门与实战指南

Supabase 简介

Supabase 是一个开源的后端即服务(BaaS)平台,基于 PostgreSQL,提供数据库、认证、存储和实时服务。它类似于 Firebase,但使用 PostgreSQL 作为数据库,支持通过 RESTful API 和 SDK 实现前后端交互。
Supabase 提供了丰富的功能,包括数据库操作、认证、实时数据和文件存储。通过简单的 SDK 调用,即可实现后端功能。对于前端开发者,Supabase 是一个强大的后端解决方案,可以快速构建应用。

Supabase 入门

创建项目

注册并创建项目

  • 访问 database.new 创建一个新的 Supabase 项目。
  • 在项目仪表板中找到 Project URLanon key
    安装 CLI(可选)
  • 如果需要本地开发,可以安装 Supabase CLI:
    npm install -g supabase
    
  • 初始化项目:
    supabase init
    
  • 启动本地服务:
    supabase start
    

安装依赖

以 JavaScript 项目为例,安装 Supabase 客户端库:

npm install @supabase/supabase-js

初始化客户端

在项目中初始化 Supabase 客户端:

import { createClient } from '@supabase/supabase-js';const supabaseUrl = 'YOUR_PROJECT_URL';
const supabaseAnonKey = 'YOUR_ANON_KEY';
const supabase = createClient(supabaseUrl, supabaseAnonKey);

数据库操作

基本操作

查询数据
const { data, error } = await supabase.from('todos').select('*');
  • from 方法指定表名。
  • select 方法指定要查询的字段,* 表示查询所有字段。
插入数据
const { error } = await supabase.from('todos').insert([{ task: 'Learn Supabase', is_completed: false }]);
  • insert 方法接受一个对象或对象数组,表示要插入的数据。
更新数据
const { error } = await supabase.from('todos').update({ is_completed: true }).eq('id', 1);
  • update 方法指定要更新的字段和值。
  • eq 方法用于筛选符合条件的记录。
删除数据
const { error } = await supabase.from('todos').delete().eq('id', 1);
  • delete 方法删除符合条件的记录。

高级查询

条件筛选
  • 等于
    .eq('name', 'Leia')
    
  • 不等于
    .neq('name', 'Leia')
    
  • 大于
    .gt('id', 2)
    
  • 大于等于
    .gte('id', 2)
    
  • 小于
    .lt('id', 2)
    
  • 小于等于
    .lte('id', 2)
    
  • 模糊匹配
    .like('name', '%Lu%')
    
  • 忽略大小写的模糊匹配
    .ilike('name', '%lu%')
    
  • 为空
    .is('name', null)
    
  • 在某个范围内
    .in('name', ['Leia', 'Han'])
    
  • 包含某个数组
    .contains('tags', ['is:open', 'priority:low'])
    
  • 被某个数组包含
    .containedBy('days', ['monday', 'tuesday', 'wednesday', 'friday'])
    
  • 范围大于
    .rangeGt('during', '[2000-01-02 08:00, 2000-01-02 09:00)')
    
  • 范围大于等于
    .rangeGte('during', '[2000-01-02 08:30, 2000-01-02 09:30)')
    
  • 范围小于
    .rangeLt('during', '[2000-01-01 15:00, 2000-01-01 16:00)')
    
  • 范围小于等于
    .rangeLte('during', '[2000-01-01 14:00, 2000-01-01 16:00)')
    
  • 范围相邻
    .rangeAdjacent('during', '[2000-01-01 12:00, 2000-01-01 13:00)')
    
  • 数组重叠
    .overlaps('tags', ['is:closed', 'severity:high'])
    
  • 文本搜索
    .textSearch('content', `'eggs' & 'ham'`, { config: 'english' })
    
  • 匹配
    .match({ id: 2, name: 'Leia' })
    
  • 排除
    .not('name', 'is', null)
    
  • 或条件
    .or('id.eq.2,name.eq.Han')
    
  • 自定义筛选
    .filter('name', 'in', '("Han","Yoda")')
    
排序
const { data, error } = await supabase.from('todos').select('id, task').order('id', { ascending: false });
  • order 方法指定排序字段和排序方向。
分页
const { data, error } = await supabase.from('todos').select('id, task').range(0, 10);
  • range 方法指定分页的起始和结束记录。
限制返回数量
const { data, error } = await supabase.from('todos').select('id, task').limit(1);
  • limit 方法限制返回的记录数量。
返回单条记录
const { data, error } = await supabase.from('todos').select('id, task').eq('id', 1).single();
  • single 方法确保返回单条记录。
返回 CSV 格式
const { data, error } = await supabase.from('todos').select('id, task').csv();
  • csv 方法返回 CSV 格式的数据。

事务操作

Supabase 支持 PostgreSQL 的事务操作,可以通过 SQL 脚本在 Supabase Studio 中执行。

存储过程

可以创建存储过程并通过 Supabase 调用:

const { data, error } = await supabase.rpc('hello_world');

认证服务

用户注册

const { data, error } = await supabase.auth.signUp({email: 'example@email.com',password: 'example-password',
});
  • signUp 方法用于用户注册。

用户登录

const { data, error } = await supabase.auth.signInWithPassword({email: 'example@email.com',password: 'example-password',
});
  • signInWithPassword 方法用于用户登录。

退出登录

const { error } = await supabase.auth.signOut();
  • signOut 方法用于退出登录。

重置密码

const { data, error } = await supabase.auth.resetPasswordForEmail('example@email.com');
  • resetPasswordForEmail 方法用于重置密码。

实时数据

监听数据变化

const channel = supabase.channel('schema-db-changes').on('postgres_changes',{ event: '*', schema: 'public', table: 'todos' },(payload) => console.log('Change received!', payload)).subscribe();
  • 监听 todos 表的所有数据变化。

取消订阅

supabase.removeChannel(channel);
  • 取消订阅实时数据。

文件存储

上传文件

const { data, error } = await supabase.storage.from('avatars').upload('public/avatarpng', file);
  • upload 方法用于上传文件。

下载文件

const { data, error } = await supabase.storage.from('avatars').download('public/avatarpng');
  • download 方法用于下载文件。

删除文件

const { data, error } = await supabase.storage.from('avatars').remove(['public/avatarpng']);
  • remove 方法用于删除文件。
http://www.xdnf.cn/news/17620.html

相关文章:

  • Effective C++ 条款37:绝不重新定义继承而来的缺省参数值
  • 存储过程作为系统逻辑核心的架构思考 —— 以 SaaS 系统为例
  • 计算机视觉(8)-纯视觉方案实现端到端轨迹规划(模型训练+代码)
  • 数据库规范化:消除冗余与异常的核心法则
  • 经济基础知识第一节:物质资料生产和基本经济规律(一)
  • SQL 与 NoSQL 的核心区别
  • 为什么灰度图用G(绿色)通道?
  • Docker 101:面向初学者的综合教程
  • 【报错处理】mount: /boot/efi: unknown filesystem type ‘LVM2_member‘.
  • 记录一次react渲染优化
  • 实现文字在块元素中水平/垂直居中详解
  • 教程 | 用Parasoft SOAtest实现高效CI回归测试
  • AWS EKS 常用命令大全:从基础管理到高级运维
  • [激光原理与应用-257]:理论 - 几何光学 - 光束整形
  • Springboot注册过滤器的三种方式(Order 排序)
  • Spring Cloud系列—Config配置中心
  • 【Oracle APEX开发小技巧16】交互式网格操作内容根据是否启用进行隐藏/展示
  • VS4210芯片技术资料(IT6604+VS4210+MDIN380连接原理图)
  • 基于STC8单片机的RTC时钟实现:从原理到实践
  • 如何使股指期货套期保值效果更加精准?
  • Ansible部署应用
  • AR巡检:三大核心技术保障数据准确性
  • 聚合搜索中的设计模式
  • 【Unity】Unity中ContentSizeFitter有时无法及时自适应大小问题解决
  • Baumer高防护相机如何通过YoloV8深度学习模型实现木板表面缺陷的检测识别(C#代码UI界面版)
  • python --- 基础语法(1)
  • Web 开发 14
  • [SC]如何使用sc_semaphore实现对共享资源的访问控制
  • 【网络运维】Linux和自动化:Ansible
  • 基于RAII的智能指针原理和模拟实现智能指针