Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

this.proxy 'content-type'修改 #13

Closed
sophiabay opened this issue Oct 13, 2016 · 8 comments
Closed

this.proxy 'content-type'修改 #13

sophiabay opened this issue Oct 13, 2016 · 8 comments

Comments

@sophiabay
Copy link

在执行this.proxy 前,修改 content-type 为 application/json 呢

@xiongwilee
Copy link
Owner

this.headers['content-type'] = 'application/json'就行了,但不建议这么搞;如果这是一个提交json数据的请求,最好写一个独立的controller:this.proxy('test:test/post')

@sophiabay
Copy link
Author

现在遇到一个很奇怪的问题。
在执行this.proxy()方法前,修改了 content-type ( this.headers['content-type'] = 'application/json' )

但到java服务器端,content-type 仍然是 "application/x-www-form-urlencoded"

我用postman测试后端接口时,就不会出现这种问题??

@xiongwilee
Copy link
Owner

先不管重设content-type的方案,修改下你的ajax,直接发送一个application/json的请求,然后直接proxy到后端试试?

@sophiabay
Copy link
Author

我通过 ajax的post方法, 设定 contentType:"application/json" 后

url设置为java后台请求地址时,结果正确。

但,如果使用 proxy 后,再到java后台,结果仍然不正确。

@sophiabay
Copy link
Author

貌似找到原因了。

在 co-proxy.js 中:

function requestWap(param, options, callback) {
// 获取request参数
let opt = Object.assign({
uri: undefined, // 请求路径
method: undefined, // method
headers: undefined, // 头信息
json: false, // 是否是json数据
gzip: true, //是否gzip
timeout: 15000 // 超时时间
}, {
form: param.ctx.request.body
}, options);

form: param.ctx.request.body 把这个参数去掉,在java后台就正确了

@sophiabay
Copy link
Author

let opt = Object.assign({
uri: undefined, // 请求路径
method: undefined, // method
headers: undefined, // 头信息
json: false, // 是否是json数据
gzip: true, //是否gzip
timeout: 15000 // 超时时间
}, {
body: param.ctx.request.body
}, options);

把 form: param.ctx.request.body 修改为 body: param.ctx.request.body后就可以了。
不知道对其它地方有没有影响呢?

@xiongwilee
Copy link
Owner

赞!我升级下,跑下测试看看!

@xiongwilee
Copy link
Owner

我试了一下,如果直接把body注入到request的boay参数里,如果这个请求是一个Stream就会出问题;

这里是这样:如果当前请求content-type是application/json,则服务器收到的肯定是application/json;这里不建议再做什么转换

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants