为什么Axios.delete请求返回404错误?前后端URL一致却请求失败
Axios.delete请求404排查方案
- 第一步:先验证后端接口本身是否可用
使用Postman或者curl工具直接调用后端接口测试,示例命令:
如果调用后返回正常,说明问题出在前端;如果调用也报404,直接排查后端问题即可。curl -X DELETE http://localhost:3001/delete/1 - 第二步:检查实际请求的URL是否匹配
打开浏览器调试工具的「网络」面板,找到你发出的delete请求,查看完整的请求地址:- 确认端口是否是3001,有没有出现后端服务实际运行端口被占用、自动改成其他端口未同步前端的情况
- 确认id参数是否有效,如果id是
undefined/null,请求地址会变成http://localhost:3001/delete/undefined,无法匹配后端路由
- 第三步:排查后端路由配置问题
- 确认delete路由代码写在
app.listen()启动服务代码之前,Express的路由必须在服务启动前注册才会生效 - 确认没有前置路由先匹配到了请求,Express路由是从上到下顺序匹配的,如果前面有同路径的其他请求方法路由(比如
app.get('/delete/:id')),会先拦截请求 - 可以在delete路由第一行加打印日志,触发请求时看后端控制台有没有输出,验证请求是否成功走到该路由,同时修正你原代码的参数取值问题:
app.delete('/delete/:id', (req, res) => { console.log('收到删除请求,参数id为:', req.params.id) // 原代码直接用id属于未定义变量,需要从req.params取路径参数 const id = req.params.id db.query("DELETE FROM employees WHERE id = ?", id, (err, result) => { if (err) { console.log(err) res.status(500).send(err) } else { res.send(result) } }) });
- 确认delete路由代码写在
- 第四步:检查服务运行状态
确认Express服务没有崩溃、正常运行中,有没有出现控制台报错导致服务终止的情况。
补充:如果测试后端接口正常、前端请求地址也完全匹配,可检查React项目是否配置了全局请求拦截器,有没有对请求路径、请求方法做篡改处理。
内容的提问来源于stack exchange,提问作者Maxi Jay
相关产品推荐
相关产品推荐

