Angular+Ionic代理请求报错ENOTFOUND,求排查方案
1. 先检查proxy.conf.json的目标地址格式
别漏了http://协议!很多人写代理目标只写localhost:8081,Angular代理会把它当成一个域名去解析,自然会出ENOTFOUND。正确的配置应该是这样:
{ "/be/*": { "target": "http://localhost:8081", "secure": false, "changeOrigin": true, "logLevel": "debug" // 开debug日志能帮你排查代理过程 } }
2. 确认angular.json里的proxyConfig路径没错
检查angular.json中serve配置下的proxyConfig是不是指向你实际的配置文件路径。比如如果你的proxy.conf.json在src目录下,配置应该是:
"architect": { "serve": { "builder": "@angular-devkit/build-angular:dev-server", "options": { "browserTarget": "your-app-name:build", "proxyConfig": "src/proxy.conf.json" } } }
路径错了的话,Angular根本读不到代理配置,等于白配。
3. 看看Spring Boot服务的绑定地址
有时候Spring Boot没绑定到localhost,而是绑定了0.0.0.0或者你的局域网IP。去看Spring Boot的启动日志,找类似Tomcat started on port(s): 8081 (http) with context path ''的内容,确认实际监听的地址,然后把代理的target改成对应的地址,比如http://127.0.0.1:8081或者你的实际IP。
4. 修改配置后一定要重启开发服务器
改完proxy.conf.json或者angular.json后,必须关掉ionic serve/ng serve再重新启动,新配置才会生效。这是最容易忽略的点!
5. 检查你的请求路径是否匹配代理规则
确保AccountService里的请求是用相对路径/be/account,而不是直接写http://localhost:8081/be/account。比如:
// 正确写法 postAccount(data: any) { return this.http.post('/be/account', data); }
如果写了完整域名,请求会绕过代理,既解决不了CORS,还可能触发其他问题。
6. 试试用127.0.0.1代替localhost
偶尔本地DNS解析localhost会出问题,把代理目标换成http://127.0.0.1:8081,直接用回环地址,避免DNS解析的坑。
内容的提问来源于stack exchange,提问作者Javier Martinez Barriga

