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);