将stream响应转换为HTTP响应

我有一个API尝试向一个API发送一个HTTP请求,然后将这个图像传回给我,或者等待图像传输给我,然后发送给我这一切。

我正在使用Express和请求承诺。

这是我的代码的缩短版本。

const express = require('express'); const router = express.Router(); const request = require('request-promise'); const imgFunc = async () => { try { const response = await request.get({ method: 'GET', uri: `http://localhost:8080`, }); return response; } catch(err) { console.log(err); } }; router.get('/', async function(req, res, next) { try { const response = await imgFunc(); return res.send(response); } catch (err) { console.log(err); } }); module.exports = router; 

我得到的图像就是我所假设的二进制数据,我不知道是否需要在请求 – 承诺级别做某些事情来做出正确的决定,或者将其发回给客户端。

我在localhost上运行的服务器:8080模仿我将要实际操作的服务器。

你可以直接pipestream,而不是使用request-promise

 const express = require('express'); const router = express.Router(); const https = require('https'); router.get('/', function(req, res) { const url = 'https://www.gravatar.com/avatar/2ea70f0c2a432ffbb9e5875039645b39?s=32&d=identicon&r=PG&f=1'; const request = https.get(url, function(response) { const contentType = response.headers['content-type']; console.log(contentType); res.setHeader('Content-Type', contentType); response.pipe(res); }); request.on('error', function(e){ console.error(e); }); }); module.exports = router; 

或者使用request request-promise所基于的request库:

 const express = require('express'); const router = express.Router(); const request = require('request'); router.get('/', function(req, res) { const url = 'https://www.gravatar.com/avatar/2ea70f0c2a432ffbb9e5875039645b39?s=32&d=identicon&r=PG&f=1'; request.get(url).pipe(res); }); module.exports = router;