我有一个使用 Express 构建的后端 API,它调用 OpenAI。我还有一个 React 前端和 nginx 代理管理器。
PROD 设置为 React 客户端 > cloudflare DNS > NGINX 代理管理器 > 调用 OpenAI 的 Express API。
DEV 设置只是在 localhost:3000 上反应客户端,在 localhost:3001 上运行 api 服务器,在我的机器上运行,从 localhost:3001 Express api 调用 openai
突然在 PROD 中我收到:
Access to fetch at 'https://api.example.com/upload' from origin 'https://example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
home.jsx:59
POST https://api.example.com/upload net::ERR_FAILED 504 (Gateway Timeout)
cors 在我的 api 服务器上配置如下:
const allowedOrigins = ['https://example.com'];
app.use(helmet());
app.use(cors({
origin: function (origin, callback) {
if (!origin || allowedOrigins.indexOf(origin) !== -1) {
callback(null, true);
} else {
callback(new Error('Not allowed by CORS'));
}
},
}));
所以,我无法弄清楚为什么会抛出 COR 错误。
从我的客户那里获取电话:
const response = await fetch(`https://${apiUrl}/upload`, {
method: 'POST',
body: formData,
});
我的服务器端出现错误:
Error: Not allowed by CORS
17|leadgen | at origin (file:///root/lead-gen/leadgen-api/indext.js:29:16)
17|leadgen | at /root/lead-gen/leadgen-api/node_modules/cors/lib/index.js:219:13
17|leadgen | at optionsCallback (/root/lead-gen/leadgen-api/node_modules/cors/lib/index.js:199:9)
17|leadgen | at corsMiddleware (/root/lead-gen/leadgen-api/node_modules/cors/lib/index.js:204:7)
17|leadgen | at Layer.handle [as handle_request] (/root/lead-gen/leadgen-api/node_modules/express/lib/router/layer.js:95:5)
17|leadgen | at trim_prefix (/root/lead-gen/leadgen-api/node_modules/express/lib/router/index.js:328:13)
17|leadgen | at /root/lead-gen/leadgen-api/node_modules/express/lib/router/index.js:286:9
17|leadgen | at Function.process_params (/root/lead-gen/leadgen-api/node_modules/express/lib/router/index.js:346:12)
17|leadgen | at next (/root/lead-gen/leadgen-api/node_modules/express/lib/router/index.js:280:10)
17|leadgen | at expressInit (/root/lead-gen/leadgen-api/node_modules/express/lib/middleware/init.js:40:5)
我的开发设置中一切运行良好,并且之前在 Prod 中运行,我进行了一些更新,然后开始收到网关超时和 cors 错误,但是当我将更改回滚到以前的工作版本时,我仍然收到的错误。所以,我不知道会发生什么变化。
任何见解或帮助将不胜感激,如果我可以提供更多详细信息,请告诉我。
我没有向 OpenAI 发出多个较小的请求,而是将其合并为更少的大型请求。我还更新了 Nginx 中的 proxy_timeout,但可能会测试我能做的最低限度是超时,而不会遇到超时错误。