首页 > 解决方案 > Node + Express Backend:调用第三方API

问题描述

我有 node + express 后端,它由我的角度前端(两个独立的域)调用。在我的后端,我正在对其他第三方 API 进行 API 调用。当我在本地部署它时,我的后端工作正常,但是在将它部署到 aws 时,请求超时(CORS 问题?)。我检查了我的部署问题,它成功部署,并且我能够调用我不调用第三方的端点 - API。我还检查了 API,当我手动或直接从我的前端调用它时它可以工作。

知道可能是什么问题吗?

标签: node.jsamazon-web-servicesexpressamazon-elastic-beanstalk

解决方案


是的,这是一个 CORS 问题。处理此问题的最常见方法是添加一个Reverse Proxy(例如 Nginx)以拥有一个域,该域既为应用程序提供服务(静态文件)又公开后端(API)。

                    +----------+
                    |          |
                    |  Client  |
                    |          |
                    +----+-----+
                         |
                         |  myDomain.com
                         |              
                     [INTERNET]
                         |
                         |
                         v  :80
                +--------+-------+
            /*  |                |   /api
     +----------+  Revese Proxy  +---------+
     |          |                |         |
     |          +----------------+         |
     |                                     |
     |                                     |
     | :8080                               | :3000
     |                                     |
+----+----------+                +---------+-----+
|               |                |               |
|  Angular      |                |  Backend      |
|  (webserver)  |                |  (API server) |
|               |                |               |
+---------------+                +---------------+

任何请求myDomain.com都会被检查。如果路径包含/api请求将被传递到后端。任何其他请求将被传递到包含 SPA 静态文件的网络服务器。

这意味着您需要在/api客户端 API 调用中添加前缀(请参阅https://angular.io/guide/build#proxying-to-a-backend-server

注意:您可以使用子域而不是路径来实现相同的效果(myDomain.com/api将变为api.myDomain.com/)。您只需要能够在部署中支持它。


推荐阅读