今天下午一位同事在自己的imac上调试前端程序,使用webpack的代理功能试图连接自己机器上的后端服务。发现代理无效,足足折腾了一下午,最后总算搞定了。

记录一下具体的原因:

  1. 当代理的目的站点存在的时候,如果接口不存在(或路径错误),则浏览器中会看到webpack返回了404,其地址是代理之前的地址。并且,终端中不会显示错误。
  2. 当代理的目的站点不存在的时候,则浏览器中会看到webpack返回了504,返回内容为代理失败。并且在终端终会显示详细的失败代理信息,从哪映射到哪。

以我们实际发生的问题为例:

前端用webpack-dev-server启动在 localhost:8080,接口路径为 /api/somefunction,需要代理映射到 localhost:8081/api/somefunction上

但是实际上,localhost:8081上面该方法的路径是 /api/somefunction/,注意多了一个斜线

由于localhost:8081一直是可以访问的,所以浏览器始终返回的是 localhost:8080/api/somefunction 不存在,404错误。理所当然的就会被认为是代理没有起作用。怀疑ide的问题,怀疑终端的问题,怀疑操作系统的问题,怀疑机器的问题

当然同样的代码在别人的机器上,是可以出现代理错误的,因为别人的机器上没有启动localhost:8081的服务

最终直到他把自己的localhost:8081停掉,才发现了根本的原因。

希望看到的人能够有所借鉴,少走弯路。