比如:我在页面上传一个文件,但我需要直接把文件数据流代理到第三方服务器上面,代理过程中可能我要对headers或者其他的做一些处理或者包装,因此就没有直接用nginx直接代理转发,请问一下我需要怎么处理? 还有下载文件代理?
@fengxinming 你如果对 http 的协议有一定理解的话,可以自己基于 egg 提供的功能来实现你要的需求,简单的来说就是:
// config/config.default.js
exports.bodyParser = {
ignore: '/proxy', // 配置对 /proxy 路径请求不解析 body
};
// app/router.js
app.get('/proxy', 'proxy.index');
// app/controller/proxy.js
module.exports = app => {
return class ProxyController extends app.Controller {
* index() {
const { ctx } = this;
const headers = processHeader(ctx.headers);
const result = yield this.curl(target, {
streaming: true, // 流式获取响应
stream: this.req, // 将原始请求的 body 转发给 target
});
ctx.body = result.res; // 将 target 的响应直接赋值给 body
}
}
}
@atian25 别用这个,我还没改过
@popomore 有什么 bug 么?
@atian25 用的 request,还没重构过。
这个先关了, 有兴趣的同学可以用自带的 httpclient 封装个 egg-httpproxy, 参考上面 koa-proxy 的源码和死马的示例.
Most helpful comment
@fengxinming 你如果对 http 的协议有一定理解的话,可以自己基于 egg 提供的功能来实现你要的需求,简单的来说就是: