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

Express与React环境下度假村条目更新失败问题排查

解决你的度假村更新接口404问题

嘿,我来帮你拆解这个404错误的原因,其实核心是几个小细节没对应上:

1. HTTP请求方法完全不匹配

你后端给更新功能配的是PUT路由:

router.route('/:userid/:id').put(protect, resortOwner, updateResortOwner)

但Redux action里却用了axios.post()发请求:

const { data } = await axios.post(`/api/resorts/${userInfo._id}/${resort._id}`, resort, config)

POST请求只会匹配到你用来创建度假村的/api/resorts/:userid路由,根本找不到更新的接口,自然返回404。

修复方法:
把action里的axios.post改成axios.put:

const { data } = await axios.put(`/api/resorts/${userInfo._id}/${resort._id}`, resort, config)

2. 控制器注释写错了(容易误导自己)

看你的updateResortOwner控制器顶部的注释:

// @route PUT /api/resorts/:userid

但实际后端的更新路由是PUT /api/resorts/:userid/:id,这个注释会让你或其他同事误以为路由结构不对,赶紧修正注释:

// @description Update a resort
// @route PUT /api/resorts/:userid/:id
// @access Private/Admin

3. 额外的小优化(不影响404,但建议处理)

  • 前端submitHandler里传了email字段,但后端控制器完全没处理这个字段。如果你的Resort模型里有email字段,记得在控制器里加上resort.email = email;如果没有,就删掉前端的email参数,避免传冗余数据。
  • 后端控制器的字段赋值可以简化,不用一个个写,用Object.assign更清爽:
if(resort){
  Object.assign(resort, {
    name, price_per_night, description, address, city, province,
    zip_code, latitude, longitude, phone, website, amenities, image
  })
  const updatedResort = await resort.save()
  res.json(updatedResort)
}

按照上面的步骤改完,404的问题肯定能解决啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:28:55