使用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的
updateProductSuccessreducer逻辑,确保payload的id和product能正确更新前端状态 - 调用
updateProducts时,确认传入的id是正确的产品ID,product包含需要更新的字段
内容的提问来源于stack exchange,提问作者Vlad Bocai
相关产品推荐
相关产品推荐

