Supabase使用指南
初始化
npm install @supabase/supabase-js
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
);
数据库查询
// 查询
const { data, error } = await supabase
.from('users')
.select('id, name, email, posts(*)')
.eq('active', true)
.order('created_at', { ascending: false })
.limit(10);
// 插入
const { data: user } = await supabase
.from('users')
.insert({ name: 'Alice', email: 'alice@example.com' })
.select().single();
// 更新
await supabase.from('users').update({ active: false }).eq('id', 1);
// 删除
await supabase.from('users').delete().eq('id', 1);
// RPC (存储过程)
const { data } = await supabase.rpc('get_user_stats', { user_id: 1 });
用户认证
// 注册
await supabase.auth.signUp({ email: 'a@b.com', password: 'password' });
// 登录
await supabase.auth.signInWithPassword({ email: 'a@b.com', password: 'password' });
await supabase.auth.signInWithOAuth({ provider: 'github' });
// 获取用户
const { data: { user } } = await supabase.auth.getUser();
// 退出登录
await supabase.auth.signOut();
// 监听认证状态变化
supabase.auth.onAuthStateChange((event, session) => {
console.log(event, session?.user.id);
});
实时订阅
const channel = supabase
.channel('users-changes')
.on('postgres_changes', {
event: '*', // INSERT | UPDATE | DELETE | *
schema: 'public',
table: 'users',
filter: 'active=eq.true',
}, (payload) => {
console.log('Change:', payload.eventType, payload.new);
})
.subscribe();
// 取消订阅
await supabase.removeChannel(channel);