我有node+express后端,它由我的角前端(两个独立的域)调用。 在我的后端,我正在做一个API调用其他一些第三方API。 当我将后端部署到本地时,它工作得很好,但是当将它部署到aws时,请求超时(CORS问题?)。 我检查了部署中的问题,并且它成功地部署了,并且我能够调用没有调用第三方API的endpoint。 我还检查了API,当我手动调用它或直接从我的前端调用它时,它是工作的。
知道问题出在哪里吗?
是的,这是CORS的问题。 处理这一问题的最常见方法是添加反向代理
(例如Nginx),以拥有一个既为应用程序(静态文件)提供服务又公开后端(API)的单一域。
+----------+
| |
| Client |
| |
+----+-----+
|
| myDomain.com
|
[INTERNET]
|
|
v :80
+--------+-------+
/* | | /api
+----------+ Revese Proxy +---------+
| | | |
| +----------------+ |
| |
| |
| :8080 | :3000
| |
+----+----------+ +---------+-----+
| | | |
| Angular | | Backend |
| (webserver) | | (API server) |
| | | |
+---------------+ +---------------+
将检查对mydomain.com
的任何请求。 如果路径包含/api
,则请求将被传递到后端。 任何其他请求都将被传递到包含SPA静态文件的Web服务器。
这意味着您需要将/API
前缀添加到客户端API调用中(请参见https://angular.io/guide/build#proxying-to-a-backend-server)
注意:您可以使用子域而不是路径来实现相同的功能(mydomain.com/api
将变成api.mydomain.com/
)。 您只需要能够在部署中支持它。