NodeJS React应用程序访问服务器而不是本地计算机

l5tcr1uw  于 2023-06-22  发布在  Node.js
关注(0)|答案(2)|浏览(158)

我正在做几个应用程序:

  • 单页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?

x8goxv8g

x8goxv8g1#

您的React SPA将在访问者的浏览器(* 客户端 )上执行,并将请求发送到您的(公开可用的) 服务器 *。
在开发过程中,您可以使用webpack-dev-server为您的React前端提供服务,这仅适用于此本地开发阶段:它有助于实时构建和热重载。但是对于生产环境,您构建了普通的静态HTML/JS/CSS资产文件,这些文件(通常)按原样托管,以便访问者的浏览器可以下载它们并在客户端执行它们。
在此客户端代码(您的React SPA)中,必须硬编码API服务器的URL:

  • localhost将请求发送到与浏览器位于同一台机器上的服务器(这就是您所经历的)
  • 主机URL(域)或直接指向 * 远程 * 服务器的IP地址(这是正常情况)
  • 一个 relative URL,浏览器使用从其获取HTML文件的相同基URL进行解析(这也很常见,前提是资产文件由与API相同的服务器提供)

如果您想阻止来自未识别客户端的请求(即不是来自你的React SPA),通常的方法涉及身份验证,或者至少是一种形式的API令牌。显然,您还可以实施其他形式的保护,通常检查来源和IP地址(假设您知道访问者从哪里连接)。如果你的API必须是非常保密的,你可以把它隐藏在一个私有网络中,让你的用户通过VPN连接。

pdkcd3nj

pdkcd3nj2#

您需要使用API的公共域名进行API调用,因为可以从任何浏览器公开访问react应用程序。您只能使用localhost在EC2上测试API。

相关问题