Express服务器POST请求返回404:用户信息更新接口异常求助
解决Express POST请求404(GET正常)的问题
核心问题是服务器路由与客户端请求的参数传递方式不匹配:
服务器端定义的是路径参数/user/update/:id,但客户端发送请求时用的是查询参数?id=${id},导致Express找不到对应的路由,返回404。
修复方案一:修改客户端,使用路径参数
将客户端的请求URL改为路径参数形式,与服务器路由匹配:
export const updateUser = async (id, userDetails) => { // 把?id=${id}替换为/${id},用路径参数传递id const endpoint = `${serverIp}/user/update/${id}`; try { const response = await fetch(endpoint, { method: "POST", headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify(userDetails) }) const result = await response.json(); return result; } catch (error) { console.log(error) } }
修复方案二:修改服务器端,支持查询参数
如果想保留客户端的查询参数方式,调整服务器路由逻辑,从req.query获取id:
userRoutes.route('/user/update').post(function (req, response) { let db_connect = dbo.getDb("preview"); // 从查询参数中获取id,而非路径参数 let myquery = { _id: ObjectId(req.query.id) }; let newValues = { $set: { name: req.body.name, user_name: req.body.user_name }, }; db_connect .collection("users") .updateOne(myquery, newValues, function (err, res) { if (err) throw err; console.log('user updated'); response.json(res); }) });
额外检查项
- 确认
serverIp末尾没有多余斜杠,避免出现//user/update这类无效路径 - 验证MongoDB的
ObjectId是否正确导入,防止因id格式错误引发后续异常 - 可在服务器路由中添加
console.log(req.params)或console.log(req.query),确认参数是否正常接收
内容的提问来源于stack exchange,提问作者AntarniP
相关产品推荐
相关产品推荐

