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
相关产品推荐
相关产品推荐

