gpt4 book ai didi

node.js - CORS 阻止来自 Dockerized React 项目的 API 调用

转载 作者:行者123 更新时间:2023-12-02 19:05:21 24 4
gpt4 key购买 nike

我在运行分离的 dockerized React 应用程序时遇到问题,该应用程序对 dockerized Node.js 微服务进行 Restful 调用。我遇到的问题是请求被 CORS 策略阻止,并出现以下错误:
Access to XMLHttpRequest at 'http://localhost:3001/api/restaurants/' from origin 'http://localhost:3000' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains the invalid value '"http://172.28.1.1:3000"'.
当容器运行时,我使用一个 url 环境变量来设置接受的 cors header 。我使用相同的技术在 2 个 headless 应用程序之间发出请求。 React 有什么东西意味着这不起作用吗?

我尝试在 docker-compose 中设置 IP 地址,以便作为 CORSHEADER env 变量传入。我在下面添加了相关代码。

docker -compose.yml

version: '3'

services:
web-ui-service:
container_name: web-ui-service
build:
context: .
dockerfile: Dockerfile
volumes:
- '.:/usr/src/app'
- '/usr/src/app/node_modules'
ports:
- '3000:3000'
depends_on:
- restaurant-data-service
networks:
vegitable_net:
ipv4_address: 172.29.1.1

restaurant-data-service:
image: timhaydenhawkins/restaurant-data-service
environment:
CORSHEADER: "http://172.29.1.1:3000"
ports:
- 3001:3001
networks:
vegitable_net:
ipv4_address: 172.29.1.2

networks:
vegitable_net:
ipam:
driver: default
config:
- subnet: 172.29.0.0/16

餐厅数据服务中的 Cors header 设置
module.exports = function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', process.env.CORSHEADER);
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT,
DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-
With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
}

这种技术在容器中的 headless 应用程序中运行良好,但在 React 中运行时存在实际问题。有任何想法吗?

最佳答案

你的 Node 应用程序应该支持 CORS,如果你使用 express,你应该
在 app.js 文件中添加以下行
const cors = require('cors');
app.use(cors());
app.options('*', cors());

关于node.js - CORS 阻止来自 Dockerized React 项目的 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53870046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com