当前位置: 首页 > 知识库问答 >
问题:

如何在部署中使用具有 expressjs 后端的创建-反应-应用在部署中正确进行 api 调用?

邹俊豪
2023-03-14

我正在尝试将 react 应用程序部署到服务器。

当我部署的应用程序尝试调用同一服务器上的api时,它会收到以下错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:3045/login. (Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘http://xxx.xxx.x.xx:5000’).

包 .json 文件指定了代理:

  "proxy": "http://localhost:3045",

下面是我的api调用:

fetch('/login',
      {
        method: 'POST',
        credentials: 'include',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          password
        })
      })).json()

更让我感到困惑的是,当我从远程服务器提供站点,从我自己的本地计算机访问它,并在本地计算机上提供后端时,该站点正在调用我自己的本地端口(成功,一旦我注意到发生了什么并将cors配置源更改为远程服务器的IP进行测试), 并访问了从我的本地计算机提供的 api,而不是在其(远程部署服务器)自己的本地端口上。

我在远程服务器api上的cors配置:

app.use(
  cors({
    origin: 'http://localhost:5000',
    credentials: true,
  }),

我需要做什么改变才能让我的站点对自己的本地端口而不是客户端进行api调用?

共有2个答案

哈翔
2023-03-14

尝试在没有任何特殊 cors 模块的情况下进行设置:

app.use(function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:5000');//If it doesn't work, change it to "*"
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type,token');
    res.setHeader('Access-Control-Allow-Credentials', true);
    next();
});
阮选
2023-03-14

从内存中(并遇到类似问题)代理在部署时并不意味着有效。

请参见生产版本中的创建-反应-应用程序代理

 类似资料:
  • 我似乎找不到任何关于如何在我的IBM Social Business SmartCloud站点中注册/部署应用程序的文档。这是在他们的云服务器上,而不是我自己的本地主机上。 我使用IBM SmartCloud Engage演示帐户订阅创建了一个Admin AppDeveloper用户帐户。我基本上是在尝试将HelloWorld iWidget添加到某个应用程序菜单中,但找不到注册/添加的位置,因此

  • 我正在Intellij Idea中开发一个Java Web应用程序,目前我正在重写我们的一些服务器工作,以使它们更加可定制。 我遇到的问题是,当我使用Idea调试War文件时,我似乎让调度器Servlet的多个实例运行。这导致我得到一个“堆空间不足”错误。我需要在Intellij中运行,这样我就可以在服务器运行时调试和检查变量。 当我直接从命令行运行Tomcat时不会出现此问题。 我在servle

  • 理论上只要可以使用主机名做服务注册的应用都可以迁移到 kubernetes 集群上。看到这里你可能不禁要问,为什么使用 IP 地址做服务注册发现的应用不适合迁移到 kubernetes 集群?因为这样的应用不适合自动故障恢复,因为目前 kubernetes 中不支持固定 Pod 的 IP 地址,当 Pod 故障后自动转移到其他 Node 的时候该 Pod 的 IP 地址也随之变化。 将传统应用迁移

  • 注 这一章可以有时有点难打通。 坚持并完成它 ;部署是在网站开发过程的重要组成部分。 这一章放在本教程的中部,因此你的指导者可以帮助你在使网站上线中的一些小困难。 这意味着如果您花大量的时间,你仍然能独立完成这个教程。 到目前为止您的网站只是在您的计算机上可用,现在您将了解如何部署它 ! 部署是在互联网上发布你的应用程序的一系列过程,因此人们最终可以一起去看看你的应用程序。 正如你所学习的,一个网

  • 为了使用 Electron 部署你的应用,您需要进行打包和重塑。这样做的最简单的方法是使用以下第三方打包工具之一: electron-forge electron-builder electron-packager 这些工具将覆盖发布一个Electron应用所需采取的所有步骤,例如,打包应用程序,重组可执行程序,设置图标和可配置的创建安装程序。 Application Distribution T

  • 程序开发完毕之后,我们现在要部署Web应用程序了,但是我们如何来部署这些应用程序呢?因为Go程序编译之后是一个可执行文件,编写过C程序的读者一定知道采用daemon就可以完美的实现程序后台持续运行,但是目前Go还无法完美的实现daemon,因此,针对Go的应用程序部署,我们可以利用第三方工具来管理,第三方的工具有很多,例如Supervisord、upstart、daemontools等,这小节我介