在NodeJS上redirect图片请求

在我的应用程序代码中,对于一组特定的API,我正在做一个像下面这样的NodeJS请求,它应该返回一个图像作为正文。 这个相同的请求对邮差工作正常(我可以看到图像)。

module.exports = { getThumbnail: function (thumbnailUrn, env, token, onsuccess){ request({ url: config.baseURL(env) + config.thumbail(thumbnailUrn), method: "GET", headers: { 'Authorization': 'Bearer ' + token, } }, function (error, response, body) { // error check removed for simplicity... onsuccess(body); }); } } 

上面的代码在我自己的安全检查下运行并添加了令牌标头。 它工作正常(请求调用返回200 /确定)。

现在在我的应用路由器,我想作为一个图像作为回应,但输出不被解释为一个图像。 这是我有什么:

 var dm = require(/*the above code*/); // express router var express = require('express'); var router = express.Router(); router.get('/getThumbnail', function (req, res) { var urn = req.query.urn; dm.getThumbnail(urn, req.session.env, req.session.oauthcode, function (thumb) { res.writeHead(200, { 'Content-Type': 'image/png' } ); // at this point, the 'thumb' variable is filled // but I believe is not properly encoded... // or maybe the res.end output is missing something... res.end(thumb, 'binary'); }); }); module.exports = router; 

编辑 :由Nodari Lipartiya评论,这是一种代理行为(服务器(响应与图像) – >代理(node.js /重新发送到客户端) – >最终用户)

我不确定什么会回来thumb ,但下面的代码似乎为我工作(为简单起见,绕过Express):

 var http = require("http") var fs = require("fs") var server = http.createServer(listener) server.listen(() => { console.log(server.address().port) }) var binary = fs.readFileSync("path to local image") function listener(req, resp) { resp.writeHead(200, { 'Content-Type': 'image/png' } ); resp.end(new Buffer(binary), "binary") } 

如果将它包装在Buffer会发生什么?

如果我正确地理解了一切:我做到了
server.js

 var fs = require('fs'); var express = require('express'); var app = express(); app.get('/img', function(req, res, next) { var stream = fs.createReadStream('img.jpeg'); var filename = "img.jpeg"; filename = encodeURIComponent(filename); res.setHeader('Content-disposition', 'inline; filename="' + filename + '"'); res.setHeader('Content-type', 'image/jpeg'); stream.pipe(res); }); app.listen(9999, function () { console.log('Example app listening on port 9999!'); }); 

的proxy.js

 var request = require('request'); var express = require('express'); var app = express(); app.get('/img', function(req, res, next) { console.log('proxy/img'); request({ url: 'http://localhost:9999/img', method: "GET", }, function (error, response, body) { res.end(body, 'binary'); }); }); app.listen(9998, function () { console.log('Example app listening on port 9998!'); }); 

req.js

 var request = require('request'); request({ url: 'http://localhost:9998/img', method: "GET", }, function (error, response, body) { console.log('body', body); }); 

为我工作。 请让我知道你是否需要帮助。