sorrycc / roadhog

🐷 Cli tool for creating react apps, configurable version of create-react-app.
2.72k stars 341 forks source link

基于 roadhog.mock.js 配置转发服务,发送 post 请求,参数无法传递 #689

Open remotesc2 opened 6 years ago

remotesc2 commented 6 years ago

在 .roadhog.mock.js 中进行了如下配置

export default noProxy ? {"POST /proxy8/(.*)": "http://218.76.*.*:8090/"} : delay(proxy, 1000);

使用 postman 发送 post 请求(参数形式均为 x-www-form-urlencoded),get 请求没有问题
如果请求为:http://218.76.*.*:8090/web-service/service/water-meter-manage.do,服务端能接收到相关参数
如果请求为:http://localhost:8000/proxy8/web-service/service/water-meter-manage.do,相同的参数,服务端没有获取到

之前用的 devServer 的 proxy 进行配置也是好的

 "proxy": {
   "/proxy8": {
     "target": "http://218.76.*.*:8090/",
     "changeOrigin": true,
     "pathRewrite": { "^/proxy8" : "" }
   }
 },

是不是在做请求转发时,参数处理有问题?现在正在跟踪 utils/mock.js 中相关代码

remotesc2 commented 6 years ago

大家都没有碰到这个问题吗?

aweffr commented 6 years ago

我也碰到了, 我提的问题描述在这里

remotesc2 commented 6 years ago

我倒不是 pending 状态,只是通过 post 请求的参数(form-data 和 x-www-form-urlencoded)全部获取不到

alansuhe commented 6 years ago

@remotesc2 我也好不容易发现这个问题,整死人

remotesc2 commented 6 years ago

@alansuhe 哈,你可以在服务地址中,用 api 做 mock 数据的标记,用 proxy 做真实转发的标记。转发还是利用 webpack 的 proxy 配置。 先这么的用着,只不过服务地址的标记需要切换

wangzhics commented 6 years ago

我也是这种情况,也是POST无法传参 后端是使用spring-boot做的,没有使用@RequestBody注解而是使用的 x-www-form-urlencoded 前端我也是需要mock到本地的后台服务做测试,发现直连后端服务没有问题,但是使用mock的代理参数就传不过去 出现x-www-form-urlencoded的参数无法通过mock的代理传参是因为roadhog里面的mock.js使用了body-parser把参数都转换了(https://github.com/villadora/express-http-proxy/issues/162) 我现在是直接在.webpackrc.js里面使用devServer创建代理,8790是实际后端服务的端口 proxy: { '/action': { target: 'http://localhost:8790/', changeOrigin: true, }, }

outlierlol commented 6 years ago

same problem

davecat commented 6 years ago

正确的做法是用webpack的proxy代理,即.webpackrc.js 。 这里貌似是作者引用的一个proxy组件BUG引起的, 直接看源码才发现,在执行roadhog时候会引用.roadhogrc.mock.js暴露的proxy,查看roadhog源码,发现作者用的proxy组件 import proxy from 'express-http-proxy'; express-http-proxy这个组件可以去查看issues,一个现在还存在的bug就是当form传送文件时候,会把传的数据忽略掉,详细见issues. 而webpack用的proxy中间件是webpack-dev-middleware. 作者是否会替换掉项目内的这个proxy组件呢?@sorrycc

zjjjjjjjjjjd commented 5 years ago

我也发现roadhog.mock.js内设置的proxy代理是无效的,我是从dora转过来的,如果每次切换代理地址都要通过修改webpack然后重新编译这会让我很不习惯。 @sorrycc

zjjjjjjjjjjd commented 5 years ago

@davecat 我刚刚去看了这个插件express-http-proxy,其中一个issus(https://github.com/villadora/express-http-proxy/issues/321)提到了这个问题。最新版似乎已经修复是否可以做一次更新呢? @yesmeck

yesmeck commented 5 years ago

修过一次 https://github.com/sorrycc/roadhog/pull/797 升级到最新版试试。

另外这库不再维护了,建议迁移到 https://github.com/umijs/umi