【问题标题】:Can't get proxy working in my react and node app无法让代理在我的反应和节点应用程序中工作
【发布时间】:2018-09-24 05:26:43
【问题描述】:

我正在使用 node.js express 后端制作一个反应客户端应用程序。这是我的项目结构:

客户端应用正在使用代理,所以在它的 package.json 中,它有一行:

"proxy": "https://localhost:5000"

这似乎导致以下错误:

浏览器在 URL /favicon.ico 处请求一个 favicon.ico。通常,这将是对 react 应用程序的请求,因此将向localhost:3000/favicon.ico 发出请求。但由于我们现在使用代理,请求被发送到localhost:5000/favicon.ico,注意端口号的变化。这会导致代理错误,这是它在终端中所说的:

Proxy error: Could not proxy request /favicon.ico from localhost:3000 to https://localhost:5000.
[1] See https://nodejs.org/api/errors.html#errors_common_system_errors for more information (EPROTO).

在浏览器中显示GET http://localhost:3000/favicon.ico 500 (Internal Server Error)。

我担心这个问题会导致我的应用出现其他问题,所以我想解决它。我尝试在我的 server.js 文件中执行此操作:

app.get('/favicon.ico', (req, res) => {
  console.log("got to server")
  res.send("favicon placeholder")
})

很遗憾,它不会改变应用的行为。发生了完全相同的错误,并且 console.log 没有输出任何内容,这让我认为甚至没有任何东西被路由到服务器。现在,最重要的问题是:为什么会这样?为什么请求没有发送到服务器?

附加信息: 这是服务器的 package.json 文件,位于主文件夹中。 主页/package.json:

{
  "name": "sentify-server",
  "version": "1.0.0",
  "scripts": {
    "client": "cd client && yarn start",
    "server": "nodemon server.js",
    "dev": "concurrently --kill-others-on-fail \"yarn server\" \"yarn client\""
  },
  "dependencies": {
    "express": "^4.16.3"
  },
  "devDependencies": {
    "concurrently": "^3.5.0"
  }
}

【问题讨论】:

  • 客户端应用程序使用代理是什么意思?您是否在 ajax 客户端上设置代理设置?如果您尝试对不同的来源(protocol://host:port)进行 ajax 调用,而不是在您的页面上提供服务,您将遇到 CORS 问题。在不同端口上提供内容的 Web 应用程序的标准方法是通过 nginix/apache/IIS 进行反向代理。
  • 你使用什么代理?看起来代理仅用于反应应用程序,浏览器本身不使用。浏览器请求完全独立于您的反应应用程序的网站图标,因此不使用代理。我假设 500 来自现在不允许浏览器访问端口 3000 的设置?
  • 对不起,我对术语不太熟悉,但我正在做的事情是:我在端口 5000 托管服务器,在 3000 托管客户端应用程序。然后在 package.json客户端应用程序的文件我已将代理字段指定为"localhost:5000"。就我而言,这是为了避免在对 Twitter 进行 API 调用时出现 CORS 问题。我在 server.js 文件中进行 API 调用并将它们提供给客户端应用程序。
  • @CFrei,那为什么说Could not proxy request /favicon.ico from localhost:3000 to https://localhost:5000.?看起来它确实在使用代理做某事。我使用的代理是什么意思?我已经提供了所有信息,我所做的只是在客户端应用程序的 package.json 中指定一个代理字段。
  • 你需要同时启动你的后端服务器和客户端,这意味着你需要观察你的 express 服务器,同时 npm 启动你的 react 应用来代理请求。此外,对于反应,您是否使用 ajax 尝试从您的服务器获取它?

标签: javascript node.js reactjs


【解决方案1】:

经过一番折腾,我发现了问题所在。 package.json 文件中的proxy 字段是https url。将其更改为 http 即可解决问题。

【讨论】:

    【解决方案2】:

    遇到类似问题,当我运行“npm start”时,我意识到我在客户端文件夹而不是父服务器文件夹中,请仔细检查您的文件夹。

    【讨论】:

      【解决方案3】:

      如果你使用 http 而不是 https 就可以了

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 1970-01-01
        • 2014-09-09
        • 2012-07-19
        • 1970-01-01
        • 2021-02-04
        相关资源
        最近更新 更多