调用fetch请求本地Node.js服务时URL被自动修改的原因是什么
URL被修改的常见原因及排查方向
- 最常见原因:触发请求的按钮位于
<form>表单标签内,你没有阻止表单的默认提交行为
表单默认提交逻辑会把表单内name="input"的输入框值作为query参数拼到表单的action属性对应的地址后面,如果你没有给表单设置action,默认就是当前页面地址也就是http://localhost:3000/,所以就出现了你看到的/?input=house的GET请求。你写的fetch代码还没执行完成,页面就已经被表单默认提交行为触发的请求覆盖了。
修复方法:给表单的submit事件回调添加e.preventDefault(),或者把按钮的type属性显式设置为button(表单内按钮默认type为submit,会触发提交)。 - 排查点2:确认你写的
fetch代码实际被执行
可以在fetch调用的位置加断点或者console.log,确认触发请求时这段代码有没有真的运行,有可能你实际触发的是另一段写了带query参数请求的逻辑,而非你贴的这段fetch代码。 - 排查点3:检查是否存在全局请求拦截/路径改写规则
如果你配置了fetch的全局拦截器、前端路由重定向规则,或者后端Express配置了301/302重定向(比如把/search/house重定向到/?input=house),也会出现这个情况。如果是后端重定向导致的,网络面板里会先出现一条状态码为3xx的/search/house请求记录。
内容的提问来源于stack exchange,提问作者yamyam
相关产品推荐
相关产品推荐

