问题标签 [http-proxy-middleware]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
517 浏览

reactjs - 尝试在 heroku 上部署 React 应用程序。应用程序的 api 在本地运行良好,但是当我部署到 heroku 时,api 不起作用

我在后端使用 Node+Express。起初,我尝试在反应客户端的 package.json 中使用“代理”:http://localhost:3001 ,但是当我尝试在 heroku 上打开我的网站时,这导致了Invalid Host Header消息。

我遵循这些指令,然后引导我使用我所在的 http-proxy-middleware。

这是我的 setupProxy.js,它位于我的应用程序的 /src 上。

当我将它部署到 heroku 时,前端工作正常。但是当我尝试进行任何 api 调用时,我会收到 HTTP 400 错误消息。请求标头看起来不错(例如/标头:https://safe-crag-59591.herokuapp.com/api/getAllProduct)但是当我尝试使用 Postman 中的任何路由时,我遇到了同样的错误。

以下是 heroku 日志中的错误示例:

我对此很陌生,所以我确信我缺少一些东西,但我觉得我已经尝试了一切。

编辑:我忘记添加服务器何时运行并设置代理它在控制台中显示此消息: [HPM] Proxy created: / -> https://safe-crag-59591.herokuapp.com 当我认为它应该是基于我的 setupProxy.js [HPM] Proxy created: /api -> https://safe-crag-59591.herokuapp.com 但这对我来说仍然是相当新的。当代理设置控制台时,我尝试设置 setupProxy.js 的其他方法将显示“/api”。

0 投票
3 回答
18327 浏览

node.js - 创建 React App http-proxy-middleware 不工作

所以我已经在我的create-react-app应用程序上使用http-proxy-middleware. 我确定我已按照信中的说明进行操作,但每次尝试单击相关链接时都会收到 404。

我正在使用create-react-appv3.2。

这是我的setupProxy.js文件:

这是发出http请求的动作创建者

这是我的快递服务器上的相关路线:

当开发服务器启动时,我收到以下消息:

所以setupProxy.js显然是被 CRA 接受了,但有些地方出了问题。我尝试在代理设置中添加通配符(例如“/api/*”),但没有成功。我在客户端的控制台中登录了以下 404:

其中指的是localhost:3000,表明localhost:3090未使用代理(应重定向到 )。

我不禁想到我在这里缺少一些非常简单的东西,但目前我正在努力让它发挥作用。

任何帮助将非常感激。

谢谢!

0 投票
1 回答
4117 浏览

express - NodeJS - 编辑和代理多部分/表单数据请求

我有一个微服务,它代理每个请求,增加一个字段。对于普通请求,这很容易,只需在request.body中添加字段并正确设置标题,但对于 multipart/form-data 请求,我从几天以来就遇到了麻烦,因为如果我在request.body中添加一个字段,它会消失。

当请求到达另一个微服务时,request.body是空的,之后它将由multer写入,将 multipart/form-data 参数放入request.body

我真的需要一个解决方案,让我将一个字段附加到代理重新流功能中的 multipart/form-data 请求

我尝试了一切以取得成功,但我被困住了。我希望一切都清楚。如果您需要,请不要害怕询问更多详细信息。我在乞求你的帮助。

0 投票
0 回答
313 浏览

webpack - Webpack-dev-server 处理代理头

当 webpack-dev-server 代理到我的产品环境时,我遇到了问题。生产服务器向我发送“set-cookie”标头,但它是一个数组,我在浏览器的开发服务器响应中看不到它。

此外,当我调试时,我看到很多来自 prod 服务器的标头,但我并没有将它们全部放在浏览器中。如何使 webpack-dev-server 按原样绕过所有标头。

谢谢。

0 投票
1 回答
47 浏览

node.js - 到 IIS ASP api 的 gae nodejs 代理产生无效的 json 响应

我有一个在 nodejs12 运行时的 Google Cloud AppEngine 上运行的 Angular 应用程序。

当我将来自 Google 云环境中快速服务器的 api 请求代理到在 IIS 上运行的 ASP 应用程序时,我收到了非常奇怪的响应

无效的 Json 响应

请求使用 header content-type: application/json 发送;字符集=utf-8

使用相同的代理设置在 postman 和本地运行的 nodejs12/express 上测试返回有效的 JSON。

期望收到有效的 JSON。

0 投票
2 回答
6036 浏览

middleware - GET 以外的代理请求与 NestJS 和 http-proxy-middleware 挂起

示例代码可在https://github.com/baumgarb/reverse-proxy-demo上找到。README.md 解释了如何在克隆存储库时重现问题。

我有一个 API 网关和一个返回 todos (TodosAPI) 的下游服务。客户端通过 API Gateway 访问下游服务。

API Gateway 正在利用http-proxy-middleware包来代理请求。有两种实现,第二个不起作用:

main.ts1.在路径 /api/v1/... 中启动的全局中间件

这种方法工作得很好,它代理所有对下游服务的请求,无论是什么 http 方法(GET、PUT、...)。

2. 在路径 /api/v2/... 启动的应用程序模块中注册的 NestMiddleware

这种方法适用于 GET 请求,但其他 http 方法(如 PUT)一直“挂起”,并且客户端从未收到任何响应。问题似乎是下游服务中的控制器从未被调用。

而这个中间件注册如下:

  • 跑步curl -X PUT -H "Content-Type: application/json" -d "{\"id\": 1, \"userId\": 1, \"title\": \"delectus aut autem - v1\", \"completed\": true}" http://localhost:8080/api/v1/todos-api/1效果很好
  • 运行curl -X PUT -H "Content-Type: application/json" -d "{\"id\": 1, \"userId\": 1, \"title\": \"delectus aut autem - v2\", \"completed\": true}" http://localhost:8080/api/v2/todos-api/1中存在下游服务中的控制器永远不会被调用的问题

NestMiddleware 正在代理请求(我可以看到一条日志行[NestMiddleware]: Proxying PUT request originally made to '/api/v2/todos-api/1'...),下游服务接收请求(我可以从日志中看到)。但是下游服务不会调用控制器/动作,最终永远不会返回。

有谁知道我在这里做错了什么?提前非常感谢!

0 投票
2 回答
2853 浏览

node.js - 使用 http-proxy-middleware 处理 WebSocket 错误

我正在使用http-proxy-middleware将一些 API 端点代理到我的 Create React App 开发服务器。

我最近引入了一个 WebSocket 端点,我正在使用以下代码代理它setupProxy.js

我遇到的问题是,如果我重新启动后端,并且 WebSocket 连接中断,整个开发服务器会崩溃:

我想知道如何优雅地处理 WebSocket 代理中的错误,以便服务器不会崩溃,而是等待 WebSocket 再次可用?

0 投票
2 回答
1749 浏览

javascript - 如何在启用 Windows 身份验证的情况下发送 API 请求?

我正在创建一个使用 React 构建的应用程序,其中 API 请求将从http://localhost:3000发送到位于https://localhost:5000的 .NET 服务器。这在禁用 Windows 身份验证时有效,但当使用 IIS 启用 Windows 身份验证时,任何请求都会返回 401 未授权。

我做了很多研究,发现我可以通过发送带有 { withCredentials: true } 的 axios 请求来很好地发送 GET 请求。如果我发送一个 POST 请求,这仍然会从服务器返回 401 未经授权,除非我根据这些规范将内容类型设置为 application/x-www-form-urlencoded 来使请求成为“简单请求”:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

当启用 Windows 身份验证时,我需要在 Web 配置中添加什么内容才能使这些请求正常工作吗?

此处对类似问题的回答对我没有帮助:Angular 5: Post-request & windows authentication,因为同时启用了匿名和 Windows 身份验证,将导致对服务器的初始 GET 请求,无法获得 Active目录用户名,使用 Windows 身份验证,因为看起来匿名身份验证优先。

我可以将内容类型设置为 application/x-www-form-urlencoded 来发出 POST 请求,但这似乎是错误的做法。有什么方法可以在服务器上设置一些设置,以便在启用 Windows 身份验证时,位于https://localhost:5000的服务器将接受来自http://localhost:3000且内容类型为 JSON 的任何 API 请求?

0 投票
1 回答
363 浏览

webpack - 如何使用 Webpack 的 http-proxy-middleware 将 _some_ 请求代理到“/”?

我正在尝试解决一个应用程序的独特问题,我需要使用 webpack dev-server 的proxy功能将特定请求代理到后端服务。

我遇到的问题是弄清楚如何处理一个奇怪的用例。

我有 Webpack DevServer (WDS) 为index.html带有多个客户端路由的单页应用程序提供服务。SPA 向需要代理的不同端点发出客户端 AJAX/fetch 请求。不幸的是,其中一个端点位于/服务器上,但仅适用于带有特定Content-Type标头的请求(我无法更改此服务正在侦听的路径,因此此处不能选择添加某种路径前缀)。

我尝试bypass在我的 WDS 配置中使用该选项来执行以下操作:

问题出现在对 HTML 的初始调用中,WDS 应该通过编译.js.css注入的捆绑包来提供服务。我得到的只是src/index.html没有注入资产的基础(没有注入<script>标签)。这是有道理的,因为我知道我在这里告诉代理,“不要将此请求代理到目标,只需提供此文件的内容”,但这不是我想要的。index.html我需要WDS 作为默认值的编译器,带有注入的资产。

所以这是我的问题,有一些特殊性:

我怎么能基本上告诉代理,“对于具有 的请求Content-type: application/json(or whatever),继续将它们代理到target,但是对于 的调用HTML,不要代理,只提供 WDS 编译的index.html”?

0 投票
2 回答
2032 浏览

node.js - 如何在动态路由上设置 http-proxy-middleware?

我正在尝试代理一些资产路由,其中​​路径的动态部分来自配置文件。我使用库进行了这项工作request,但我无法完全使用http-proxy-middleware.

这是我使用该request库时有效的代码:

我已经尝试了一些不同的变体http-proxy-middleware但这些都不起作用。示例 1:

示例 2:

我还尝试将/${p.name}/assets/**其用作 的第一个参数app.use,并且我还尝试将 a 添加/assets到对象中键和值的末尾pathRewrite。结果总是一样的:我得到浏览器请求的资产的 302。

我什至尝试在httpProxy记录到控制台的调用之前添加一个中间件函数,这样我就知道我的请求到达了正确的路径:

但我从来没有看到过那个输出。可能是一个简单的错误。也许我的第一个论点app.use是不正确的?帮助表示赞赏!

更新

我还尝试了旧方式和新方式的结合。我在 上安装了一个新路由器/${p.name}/assets,发现该onProxyRequest选项后,我在那里添加了一个函数来记录一些输出。

仍然得到一个 302,我从来没有看到onProxyReq函数的输出。