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

React+Redux+MongoDB应用PATCH更新用户收藏数组遇404错误求助

解决PATCH请求返回404的问题

你的404错误核心原因是请求URL和后端路由不匹配,咱们一步步来修复:

1. 修正前端请求URL

你的后端路由定义的是router.patch('/:id', ...),意味着需要在URL里带上用户的ID参数,但前端的请求是axios.patch('api/users', info),没有传递id,导致后端找不到对应的路由,直接返回404。

修改Action里的请求URL,把用户ID加进去。假设你的info对象里包含用户的id或者googleId,可以这样调整:

export const saveToUser = info => dispatch => {
  // 假设info里有用户的id字段,或者用googleId代替,按需调整
  axios
    .patch(`api/users/${info.id}`, info) // 这里补上用户ID参数
    .then( res => {
      dispatch({ type:SAVE_TO_USER, payload:info })
      dispatch( getUsers() )
    }).catch( err => console.log(err))
}

2. 完善后端路由的逻辑

你的后端路由里的User.update方法还有两个小问题:

  • 没有返回任何响应(比如res.send/res.json),前端会一直等待直到超时
  • 可以换成更清晰的现代写法,同时处理错误和找不到用户的情况

修改users.js的路由代码:

router.patch('/:id', async (req,res) => {
  try {
    // 按你的需求用googleId查询用户,也可以用_id
    const updatedUser = await User.findOneAndUpdate(
      { googleId: req.body.googleId }, 
      { $push: { favorites: req.body.site } },
      { new: true } // 这个参数会返回更新后的用户数据,方便前端验证
    );

    if (!updatedUser) {
      return res.status(404).json({ message: "用户未找到" });
    }

    res.json(updatedUser);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

3. 额外检查点

  • 确认info对象里确实包含googleId和site字段,否则更新逻辑会失效
  • 本地开发时,检查请求URL是否完整,比如是否需要加上域名和端口:http://localhost:5000/api/users/${info.id}
  • 确保User模型里正确定义了favorites数组字段,比如:
const userSchema = new mongoose.Schema({
  googleId: String,
  favorites: [{ type: String }] // 可根据你的site数据类型调整字段类型
});

这样调整后,你的PATCH请求应该就能正常匹配路由,成功更新用户的favorites数组了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:32:39