【问题标题】:Docker angular instance can't get data from Docker express instanceDocker Angular 实例无法从 Docker express 实例获取数据
【发布时间】:2017-10-06 10:45:37
【问题描述】:

通过 Docker compose,我构建了一组图像。其中,有一个 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());

【问题讨论】:

    标签: angularjs node.js express docker docker-compose


    【解决方案1】:

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

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

    一种可能且简单的解决方案是使用 node.js 包cors

    【讨论】:

    • 谢谢你的回复,你能看到我的更新吗?该 CORS 配置有什么问题?
    • 我用你建议的 cors npm 包切换了它,但同样的错误..
    • 你做过类似app.options( '/target', cors( corsOptions ) );const corsOptions: any = { origin: '*', methods: [ 'GET', 'POST', 'OPTIONS' ], headers: [ 'content-type' ], }; 的事情
    • 查看我对我的问题的回答。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多