Angular前端调用Spring后端出现ERR_CONNECTION_REFUSED问题求助
前端API地址硬编码为localhost
开发阶段很多人会把后端地址直接写死成http://localhost:8080/api,部署到测试服务器后,前端代码里的这个地址没改。当你从开发机浏览器访问测试服务器的前端时,浏览器是从你的本地发起请求,自然会去连你自己电脑的localhost,而不是测试服务器的。
解决:把API请求改成相对路径(比如直接用/api),这样请求会自动继承当前页面的域名和端口,也就是测试服务器的地址。Angular环境配置未切换到生产环境
Angular的environment.ts(开发环境)和environment.prod.ts(生产环境)是分开的,如果打包时没指定生产环境配置,用的还是开发环境里的localhost地址。
解决:打包时执行ng build --configuration=production,确保用的是生产环境配置文件,里面把API地址改成相对路径或者测试服务器的实际地址。打包时未设置正确的base-href
如果你的前端部署在Tomcat的/myapp子路径下,但打包时没加--base-href /myapp/参数,前端的相对路径解析会出错,可能导致请求误指向localhost。
解决:重新打包,加上ng build --configuration=production --base-href /myapp/,确保所有相对路径都基于部署的子路径。浏览器缓存了旧的前端代码
开发机的浏览器可能缓存了之前开发环境的前端资源,里面的API地址还是localhost,即使你部署了新的代码,浏览器还是用旧的。
解决:按Ctrl+Shift+R强制刷新页面,或者直接清除浏览器缓存后再访问测试服务器的应用。开发用的代理配置残留
开发时可能用了Angular的proxy.conf.json来转发请求到localhost:8080,如果打包时没移除相关配置,或者不小心把代理逻辑打包进了生产代码,就会导致请求还是指向localhost。
解决:部署前确认移除开发用的代理配置,前端请求直接用相对路径调用后端接口。
内容的提问来源于stack exchange,提问作者jkfe

