You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron+React项目中Supabase插入todos表数据返回空对象且数据未写入

Electron+React项目中Supabase插入todos表数据返回空对象且数据未写入

嘿,我之前也碰到过类似的情况,这种返回空对象但没报错、数据也没写入的问题,大概率是权限或者代码逻辑的小疏漏,咱们一步步来排查:

首先重点检查表权限和行级安全(RLS):
你的todos表设置了user_id关联auth.users,而且是NOT NULL约束,但Supabase默认新建的表,authenticated用户是没有插入权限的;如果开启了RLS(这是Supabase的安全最佳实践),还得有对应的策略允许用户操作自己的数据。

  • 先去Supabase控制台的「表编辑器」找到todos表,切换到「权限」标签,确认authenticated角色拥有INSERT权限;
  • 如果已经开启RLS,必须添加一条允许用户插入自己待办的策略,执行这条SQL即可:
CREATE POLICY "用户只能插入自己的待办" ON public.todos
FOR INSERT TO authenticated
WITH CHECK (auth.uid() = user_id);

这条策略能确保只有登录用户能插入属于自己的todo,和你的表结构完全匹配。

然后核对代码里的插入逻辑:
你有没有在插入时正确传递user_id?因为表的user_id是必填项,而且如果有RLS策略,必须和当前登录用户的id一致。参考示例写法:

// 先确认当前用户已登录
const { data: { user } } = await supabase.auth.getUser();
if (!user) {
  console.log("用户未登录,无法插入待办");
  return;
}
// 执行插入操作
const { data, error } = await supabase
  .from('todos')
  .insert({ 
    item: "你的待办内容", 
    user_id: user.id // 这个字段绝对不能忘!
  });
// 一定要同时打印data和error!
console.log("插入结果:", data, "错误信息:", error);

很多时候大家会忘了传user_id,或者没先验证用户登录状态,导致插入失败但没拿到错误提示。

还有Electron环境的特殊适配:
确保你在Electron+React项目里正确初始化了Supabase,比如.env文件里的SUPABASE_URL和SUPABASE_ANON_KEY配置无误,初始化客户端的代码也没问题:

import { createClient } from '@supabase/supabase-js';

const supabase = createClient(
  import.meta.env.VITE_SUPABASE_URL,
  import.meta.env.VITE_SUPABASE_ANON_KEY
);

如果Electron渲染进程开启了nodeIntegration,可能会影响Supabase的请求,你可以试试在createClient时显式指定fetch:

const supabase = createClient(
  import.meta.env.VITE_SUPABASE_URL,
  import.meta.env.VITE_SUPABASE_ANON_KEY,
  { global: { fetch: window.fetch } }
);

最后提醒:别忽略error对象!
你说Supabase返回{},可能是你只打印了data,但error对象里其实藏着详细的错误原因(比如权限不足、字段缺失),一定要同时输出error,这是排查问题的核心关键。

备注:内容来源于stack exchange,提问作者Hassan Rehan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 17:29:41