Hyperledger REST Server与Angular应用:API路由无法找到问题求助
先把你的问题场景理清楚,再一步步给你排查思路:
你的问题回顾
你在VirtualBox的Ubuntu 16.04.04虚拟机上搭了两个服务:
- REST API跑在
localhost:3000,虚拟机内访问正常 - Angular应用跑在
localhost:4200,虚拟机内访问也正常
最初访问Angular时遇到错误:
Error: Could not connect to REST server. Please check your configuration details
修改my-app/src/app/configuration.ts里的API地址为虚拟机IP后:
public ApiIP: string = "http://10.0.2.15";
出现了新错误,接下来咱们逐个排查可能的问题:
1. 先检查API服务的绑定地址(最常见的坑)
如果你的REST API只绑定了localhost(也就是127.0.0.1),那即使你用虚拟机的局域网IP10.0.2.15访问,也会直接失败——因为服务只监听本地回环地址,不对外网IP开放。
怎么验证?
在虚拟机终端执行命令,查看API的监听状态:
netstat -tulpn | grep :3000
如果输出里的地址是127.0.0.1:3000,那必须修改API的配置,让它绑定到0.0.0.0(代表所有可用IP),这样虚拟机的局域网IP才能访问到它。
2. 别漏了端口号!
你修改的ApiIP是http://10.0.2.15,但你的API明明跑在3000端口啊!浏览器默认会用80端口访问,肯定连不上。赶紧把配置改成:
public ApiIP: string = "http://10.0.2.15:3000";
改完记得重启Angular服务生效。
3. 虚拟机防火墙是否放行3000端口?
Ubuntu 16.04默认用ufw防火墙,可能把3000端口挡住了。先查看防火墙状态:
sudo ufw status
如果看不到3000端口的允许规则,就添加一条:
sudo ufw allow 3000/tcp sudo ufw reload
4. 跨域问题(CORS)
Angular跑在4200端口,API跑在3000端口,属于不同端口的跨域请求,浏览器会直接拦截。这时候需要在REST API服务里配置CORS规则,允许来自Angular应用的请求。
举个例子,如果你的API是用Node.js/Express写的,安装cors中间件:
npm install cors
然后在代码里启用:
const cors = require('cors'); // 开发环境可以直接允许所有来源,生产环境要限制具体域名 app.use(cors()); // 或者精准允许Angular的地址 // app.use(cors({ origin: 'http://10.0.2.15:4200' }));
5. 先手动测试API连通性
在虚拟机里用curl直接访问API,确认网络是通的:
curl http://10.0.2.15:3000/你的API测试路径
如果能返回正常的JSON响应,说明API服务本身没问题;如果不行,回到第一步检查绑定地址和防火墙。
要是你能把新错误的具体内容贴出来,我能帮你更快定位问题!
内容的提问来源于stack exchange,提问作者FindItKnowIt

