我正在做几个应用程序:
- 单页React应用
- 使用node express和mysql构建JSON API
在本地测试时,我使用webpack dev-sever来服务react应用程序,它向运行在本地计算机上的单独端口上的express应用程序发出网络请求。
现在我想在已经安装了mysql + apache的AWS EC2示例上托管这两个应用程序。
我首先创建了一个apache vhost来为react前端服务,并且运行良好。然后我上传了express应用程序,并在端口3000上启动了服务器。react应用程序向express应用程序发出如下请求***http://localhost:3000/API***,但请求解析到我的本地计算机中的服务器,而不是EC2服务器。如果我关闭本地服务器,那么请求将失败。
在我看来,我不需要为我的express应用程序创建一个公共端点,因为react应用程序发出的请求将位于托管这两个应用程序的服务器的本地,这是正确的吗?有没有可能让react调用我的express应用,而不需要暴露我的API?
2条答案
按热度按时间x8goxv8g1#
您的React SPA将在访问者的浏览器(* 客户端 )上执行,并将请求发送到您的(公开可用的) 服务器 *。
在开发过程中,您可以使用
webpack-dev-server
为您的React前端提供服务,这仅适用于此本地开发阶段:它有助于实时构建和热重载。但是对于生产环境,您构建了普通的静态HTML/JS/CSS资产文件,这些文件(通常)按原样托管,以便访问者的浏览器可以下载它们并在客户端执行它们。在此客户端代码(您的React SPA)中,必须硬编码API服务器的URL:
localhost
将请求发送到与浏览器位于同一台机器上的服务器(这就是您所经历的)如果您想阻止来自未识别客户端的请求(即不是来自你的React SPA),通常的方法涉及身份验证,或者至少是一种形式的API令牌。显然,您还可以实施其他形式的保护,通常检查来源和IP地址(假设您知道访问者从哪里连接)。如果你的API必须是非常保密的,你可以把它隐藏在一个私有网络中,让你的用户通过VPN连接。
pdkcd3nj2#
您需要使用API的公共域名进行API调用,因为可以从任何浏览器公开访问react应用程序。您只能使用localhost在EC2上测试API。