2014-03-01 31 views
1

我有一个代理工作正常(据我所知),直到我尝试代理图像(或者可能是任何二进制数据?)。按我的估计,下面的代码应该工作,但它不。我确信我在做一些明显的愚蠢行为,但我一直在通过论坛和apis进行挖掘,但我还没有找到正确的方法。当使用NodeJS +请求模块时,图像没有被正确代理

我的代理的'核心'看起来像下面这样。

function(req, res) { 
    ... 

    options = { 
     url: 'a url', 
     headers: { 
     'Authorization': auth 
     } 
    }; 

    request(options, 
     function(e, r, b){ 
     var encoding = (r.headers['content-type'].indexOf('image') === -1) ? 'utf8' : 'binary'; 

     res.writeHead(200, { 
      'Content-Length': r.headers['content-length'], 
      'Content-Type': r.headers['content-type'] 
     }); 

     if (encoding === 'binary') { 
      b = new Buffer(b); 
     } 

     res.end(b, encoding); 
     }); 
    } 

我是什么在这里失踪?在此先

感谢您的任何和所有帮助!

回答

2

我的问题是不与反应(如我虽然最初),而是事实请求模块默认情况下将它的响应主体编码为unicode,当di时sabled(encoding: null),响应正文被转换为缓冲区,容易被响应消耗。

options = { 
     url: url, 
     encoding: null, 
     headers: { 
     'Authorization': auth 
     } 
    }; 

    request(options, 
     function(e, r, b){ 
     var encoding = (r.headers['content-type'].indexOf('image') === -1) ? 'utf8' : 'binary'; 
     res.end(b, encoding); 
     });