Dockerangular度实例无法从Docker express实例获取数据

通过Docker撰写我build立了一组图像。 其中,有一个node.js / express服务器和一个angularjs 2.0前端。 这是docker-compose文件:

version: "3.3" services: angular: image: micheleminno/angular-client:latest build: ./angular-client ports: - "4200:4200" express: image: micheleminno/express-server:latest build: ./express-server depends_on: - mysql - elasticsearch ports: - "3000:3000" networks: - sql - nosql elasticsearch: build: elasticsearch/ ports: - "9200:9200" - "9300:9300" networks: - nosql environment: - MAX_OPEN_FILES=1048576 cap_add: - IPC_LOCK ulimits: memlock: soft: -1 hard: -1 command: echo "Elasticsearch disabled" kibana: build: kibana/ volumes: - ./kibana/config/:/usr/share/kibana/config ports: - "5601:5601" networks: - nosql depends_on: - elasticsearch command: echo "Kibana disabled" mysql: image: mysql:5.5 environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=real-affinities - MYSQL_USER=production - MYSQL_PASSWORD=production ports: - "3306:3306" networks: - sql migrations: image: micheleminno/db-migrations:latest environment: - NODE_ENV=production depends_on: - mysql networks: - sql networks: nosql: driver: bridge sql: driver: bridge 

当一切开始时,加载页面http:// localhost:4200 /触发以下GET请求到快递服务器:

 https://localhost:3000/target 

但请求不成功:

在这里输入图像说明

在这里输入图像说明

而如果我自己做的GET请求,我可以得到正确的结果:

在这里输入图像说明

更新

这是我在server.js中的CORS部分:

 const cors = require('cors'); const app = express(); app.use(cors()); 

您必须在Express Server中启用CORS 。 如果POST或GET包含任何非简单内容或标题,则CORS规范要求OPTIONS调用在POST或GET之前。

正如你可以在你的错误图片中看到的, target是一个xhr的OPTIONS请求。 另请参阅上面链接中的“预检请求”部分。

一个可能的简单的解决scheme是使用node.js包cors 。

我将https :// localhost:3000更改为http :// localhost:3000作为来自angular客户端的http请求的url,现在它可以工作。