【发布时间】: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