2016-08-08 2 views
1

superagent을 통해 클라이언트에서 스트리밍 된 파일을 제 3 자에게 파이프하기 위해 multer 미들웨어를 만들려고합니다.슈퍼 에이전트를 사용하여 읽을 수있는 스트림을 파이프로 연결

const superagent = require('superagent'); 
const multer = require('multer'); 

// my middleware 
function streamstorage(){ 
    function StreamStorage(){} 

    StreamStorage.prototype._handleFile = function(req, file, cb){ 
     console.log(file.stream) // <-- is readable stream 
     const post = superagent.post('www.some-other-host.com'); 

     file.stream.pipe(file.stream); 

     // need to call cb(null, {some: data}); but how 
     // do i get/handle the response from this post request? 
    } 
    return new StreamStorage() 
} 

const streamMiddleware = { 
    storage: streamstorage() 
} 

app.post('/someupload', streamMiddleware.single('rawimage'), function(req, res){ 
    res.send('some token based on the superagent response') 
}); 

나는이 작동하는 것 같다 생각하지만 내가 슈퍼 에이전트 요청에서받은 토큰을 반환해야하기 때문에, 슈퍼 에이전트 POST 요청의 응답을 처리하는 방법을 모르겠어요.

나는 post.end(fn...)을 시도했지만 분명히 endpipecan't both be used together을 시도했습니다. 나는 파이핑이 어떻게 작동하는지 오해하고있는 것처럼 느껴진다. 그렇지 않으면 내가하려는 것은 실용적이다.

답변

3

Superagent의 .pipe() 방법은 원격 호스트에서 로컬 응용 프로그램으로 데이터를 다운로드하는 것입니다.

다른 방향으로 파이핑이 필요합니다. 응용 프로그램에서 원격 서버로 업로드하십시오. superagent (v2.1 현재)에는 그런 방법이 없으며 다른 접근법이 필요합니다./버퍼 파일을 저장 한 다음 .attach()를 사용하여 전체 파일을 업로드 할

이야기의 multer :

가장 쉬운, 덜 효율적 하나입니다 :

당신은 두 가지 옵션이 있습니다.

열심히 일을 "파이프"파일 "수동"입니다 :

  1. 당신이 업로드에 대해 원하는 URL, 방법 및 HTTP 헤더와 슈퍼 에이전트 인스턴스를 작성,
  2. 들어오는에 data 이벤트를 수신 파일 스트림을 생성하고 각 데이터 청크와 함께 superagent의 .write() 메소드를 호출합니다.
  3. 들어오는 파일 스트림의 end 이벤트를 수신하고 서버의 응답을 읽는 방법은 .end()이라는 superagent의 메소드를 호출하십시오.
+0

의미가 있습니다. 저는 현재 첫 번째 제안을하고 있습니다. 그래서 저는 두 번째 해결책을 시도 할 것입니다. –

관련 문제