2017-09-10 4 views
1

나에게 스트림 및 이미지를 보낸 다음 해당 이미지를 요청한 클라이언트에게 다시 보내거나 해당 요청을 기다리는 API에 대한 HTTP 요청을 만드는 API가 있습니다. 이미지가 나에게 스트리밍되어 한꺼번에 전송됩니다.HTTP 응답에 스트림 응답

나는 익스프레스를 사용 중이며 약속드립니다.

다음은 내 코드의 단축 버전입니다.

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에서 실행하고있는 서버가이 모든 것을 말하고 수행 할 때 내가 치는 실제 서버를 모방합니다.

답변

1

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-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; 
+0

. 내 유일한 손을 그것으로 라우터 자체에서 및 이전에했던 것처럼 이미지를 반환하는 별도의 함수를 요청하지 논리를 가질 필요가 있다는 것입니다. – loganhuskins

+0

또한, 이것은 일반적으로 따라 오는 관용구 인 res를 "반환"할 수 없습니다. 나는 그것이 거대한 거래라고 생각하지 않지만 주목할 가치가있다. – loganhuskins