Closed nxycdl closed 8 years ago
this.request.href
thanks 另外我还有个问题.我看了proxy 使用get的时候没有问题.怎么使用post呢. 以前使用的 co-request var params ={ username: username, userpassword: userpassword.toString().toUpperCase() } var result = yield request({ uri: uri, method: 'POST', form:params });
换成 proxy 这个params 的参数怎么传呢?
demo7:function*(){ //Post请求;用Form方式提交; var params ={ username: 'username', userpassword: 'passwor'.toString().toUpperCase() } yield this.proxy({ otherInfo:'htgl:post:htgl/app/logininclassapp.do', }); this.body = this.backData.otherInfo ; }
好问题!关于proxy,有这样几种场景:
现在的proxy的机制是:
this.query
和this.request.body
的参数(也就是get和post的参数)然后分别交给后端\ 基于proxy机制的第3点,如果你想要在proxy之前发送post参数,你可以在proxy之前:修改this.request.body
即可 ; 例如:**
exports.test = function*(){
this.request.body = this.request.body || {};
this.request.body.username = username;
this.request.body.userpassword = userpassword.toString().toUpperCase();
yield this.proxy({
otherInfo:'htgl:post:htgl/app/logininclassapp.do',
})
this.body = this.backData.otherInfo
}
或者可以简化地写成这样(如果this.proxy方法的形参是一个字符串的话,this.proxy方法会自动把请求结果赋值给this.body):
exports.test = function*(){
this.request.body = this.request.body || {};
Object.assign(this.request.body, {
username: username,
userpassword: userpassword.toString().toUpperCase()
})
yield this.proxy('htgl:post:htgl/app/logininclassapp.do')
}
您对koa request 的知识太丰富了. 我用以上代码测试了一下发现有点问题,实在找不到原因,还请帮我看下. 测试代码 exports.test = function*(){ this.request.body = this.request.body || {}; this.request.body.username = 'username'; this.request.body.userpassword = 'userpassword';
yield this.proxy({
otherInfo:'htgl:post:htgl/app/logininclassapp.do',
})
this.body = this.backData.otherInfo
} 但是koa-grace 提示我以下错误: koa-grace:proxy proxying : http://www.*******.com:8888/htgl/app/logininclassapp.do +11ms koa-grace-error:proxy proxy error : http://www.*******.com:8888/htgl/app/logininclassapp.do +23ms { [Error: write after end] status: 'NULL', duration: '22ms' }
刚刚看了下, 果然这里是个BUG。
不过现在已经修复发布了,你升级下koa-grace(koa-grace-proxy的修复版本:1.0.40)即可。
另外,修复版本里我加了一个功能,proxy的时候你可以这么写了:
yield this.proxy({
otherInfo:'htgl:post:htgl/app/logininclassapp.do'
},{
form: {
username:'username',
userpassword:'userpassword'
}
})
当然,之前修改this.request.body的方式也是可以的,如果两者同时存在的话,会默认优先取:form
参数
测试通过。你太牛了。多谢帮助。
每次有人请求一次,就打印一下他请求的地址.