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

使用MongoDB与Redux时findByIdAndUpdate()无法更新集合求助

问题分析与修复方案

核心问题1:API请求未传递更新数据

在apiCalls.js的updateProducts函数中,发起PUT请求时没有将更新的product数据传递给后端,导致后端req.body为空,findByIdAndUpdate没有实际更新内容:

// 原错误代码
const res = await userRequest.put(`/products/${id}`);

// 修复后:传递product数据作为请求体
const res = await userRequest.put(`/products/${id}`, product);

核心问题2:Token初始化存在潜在加载问题

requestMethods.js中直接同步读取localStorage的persist:root,但Redux Persist的存储可能存在异步加载延迟,导致初始化时TOKEN为空,请求被后端的verifyTokenAndAdmin中间件拦截,更新操作未执行:

// 原错误代码:同步读取可能导致TOKEN为空
const TOKEN =
  JSON.parse(JSON.parse(localStorage.getItem('persist:root')).user).currentUser
    .accessToken || '';

// 修复方案:用请求拦截器动态获取token
export const userRequest = axios.create({
  baseURL: BASE_URL,
});

userRequest.interceptors.request.use((config) => {
  try {
    const persistRoot = localStorage.getItem('persist:root');
    if (persistRoot) {
      const userPersist = JSON.parse(persistRoot).user;
      const currentUser = JSON.parse(userPersist).currentUser;
      config.headers.token = `Bearer ${currentUser?.accessToken || ''}`;
    }
  } catch (err) {
    // 处理解析错误
  }
  return config;
});

额外检查点

  • 确认后端verifyTokenAndAdmin中间件正常工作,没有误拦截合法请求
  • 检查Redux的updateProductSuccess reducer逻辑,确保payload的id和product能正确更新前端状态
  • 调用updateProducts时,确认传入的id是正确的产品ID,product包含需要更新的字段

内容的提问来源于stack exchange,提问作者Vlad Bocai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:06:29