问题标签 [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.
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”。
node.js - 创建 React App http-proxy-middleware 不工作
所以我已经在我的create-react-app
应用程序上使用http-proxy-middleware
. 我确定我已按照信中的说明进行操作,但每次尝试单击相关链接时都会收到 404。
我正在使用create-react-app
v3.2。
这是我的setupProxy.js
文件:
这是发出http
请求的动作创建者
这是我的快递服务器上的相关路线:
当开发服务器启动时,我收到以下消息:
所以setupProxy.js
显然是被 CRA 接受了,但有些地方出了问题。我尝试在代理设置中添加通配符(例如“/api/*”),但没有成功。我在客户端的控制台中登录了以下 404:
其中指的是localhost:3000
,表明localhost:3090
未使用代理(应重定向到 )。
我不禁想到我在这里缺少一些非常简单的东西,但目前我正在努力让它发挥作用。
任何帮助将非常感激。
谢谢!
express - NodeJS - 编辑和代理多部分/表单数据请求
我有一个微服务,它代理每个请求,增加一个字段。对于普通请求,这很容易,只需在request.body中添加字段并正确设置标题,但对于 multipart/form-data 请求,我从几天以来就遇到了麻烦,因为如果我在request.body中添加一个字段,它会消失。
当请求到达另一个微服务时,request.body是空的,之后它将由multer写入,将 multipart/form-data 参数放入request.body。
我真的需要一个解决方案,让我将一个字段附加到代理重新流功能中的 multipart/form-data 请求中。
我尝试了一切以取得成功,但我被困住了。我希望一切都清楚。如果您需要,请不要害怕询问更多详细信息。我在乞求你的帮助。
webpack - Webpack-dev-server 处理代理头
当 webpack-dev-server 代理到我的产品环境时,我遇到了问题。生产服务器向我发送“set-cookie”标头,但它是一个数组,我在浏览器的开发服务器响应中看不到它。
此外,当我调试时,我看到很多来自 prod 服务器的标头,但我并没有将它们全部放在浏览器中。如何使 webpack-dev-server 按原样绕过所有标头。
谢谢。
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.ts
1.在路径 /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'...
),下游服务接收请求(我可以从日志中看到)。但是下游服务不会调用控制器/动作,最终永远不会返回。
有谁知道我在这里做错了什么?提前非常感谢!
node.js - 使用 http-proxy-middleware 处理 WebSocket 错误
我正在使用http-proxy-middleware
将一些 API 端点代理到我的 Create React App 开发服务器。
我最近引入了一个 WebSocket 端点,我正在使用以下代码代理它setupProxy.js
:
我遇到的问题是,如果我重新启动后端,并且 WebSocket 连接中断,整个开发服务器会崩溃:
我想知道如何优雅地处理 WebSocket 代理中的错误,以便服务器不会崩溃,而是等待 WebSocket 再次可用?
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 请求?
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
”?
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
函数的输出。