从外部Web服务获取图像,并将其传递给另一个快速js路由

我有一个外部的web服务,它返回的图像。

我有节点快递路线,这就是外部networking服务。

我正在努力将外部networking服务(这是图像)的返回对象作为高速路由的返回对象

这里是这个例子,我想从外部URL获取图像,并将其传递给它..它不起作用,有人可以帮我知道这样做吗?

exports.getImage = function (req, res) { var http = require('http'); var options = { host: 'http://www.gettyimages.co.uk', path: '/CMS/StaticContent/1391099215267_hero2.jpg', method: 'GET', headers: { "content-type": "image/jpeg" } }; var request = http.request(options, function(response) { var imagedata = ''; response.setEncoding('binary'); response.on('data', function(chunk){ imagedata += chunk }); response.on('end', function() { console.log('imagedata: ', imagedata); res.writeHead(200, {'Content-Type': 'image/jpeg' }); res.send(imagedata); }); }).on("error", function(e) { console.log("Got error: " + e.message, e); }); request.end(); }; 

现有代码的问题在于, res.send()在传递一个string时默认为非二进制编码,所以你的数据最终会因为这个问题而受到破坏。

其次,你最好只是传输数据,而不是每次都在内存中caching整个图像。 例:

 var request = http.get(options, function(response) { res.writeHead(response.statusCode, { 'Content-Type': response.headers['content-type'] }); response.pipe(res); }).on("error", function(e) { console.log("Got error: " + e.message, e); }); 

最后, host值是错误的,它应该只是主机名(无scheme): www.gettyimages.co.uk 。 另外,在请求headers中设置"content-type": "image/jpeg"是没有意义的(也可以被删除),因为你没有在请求中发送JPEG图像。