2017-04-20 11 views
0

ストリームを介してHapijsサーバーに画像をアップロードし、別のHapijsインスタンスにデータを送信(パイプ)しようとしました。Hapijsストリームを別のサーバーに転送する

だから私は、ストリームを受信し、それを転送する必要があり、このポストルート、している:私は、コードIを実行すると

this.hapi.route({ 
      method: 'POST', 
      path: Routes.index.child.upload.post, 
      config: { 
       payload: { 
        output: 'stream', 
        parse: true, 
        allow: 'multipart/form-data', 
        maxBytes: 4194304 //4MB 
       } 
       } 
      }, 
      handler: (request, reply) => {  
        this.workWithStream(request, reply); 
      } 
     }); 

this.server.route({ 
      method: "POST", 
      path: RouteManager.Routes.SearchRoute.User.Icon.post, 
      config: { 
       payload: { 
        output: 'stream', 
        parse: true, 
        allow: 'multipart/form-data', 
        maxBytes: 4194304 //4MB 
       }, 
       handler: (request, reply) => { 
        const data = request.payload.image; 
        const req = require("request").post("myOtherServer.com" + "/upload", 
        { 
         formData: { 
         image: data 
        } 
       }, (err, httpResp, body) => { 
        cb(err, JSON.parse(body)); 
       }); 
       } 
      } 
     }) 

他のサーバー上の私のルートは、このようになります常にこの応答を取得する:

それは(wは別のhapijsのサーバーにストリームを転送することが可能である方法
{ 
    "statusCode": 400, 
    "error": "Bad Request", 
    "message": "Invalid multipart payload format" 
} 

一時ファイルを保存することなく)?

おかげ

答えて

0

これは、プラグインh2o2のために使用することができるというものの一種です。

あなたが他のプラグインのと同じようにそれを登録します。

server.register({ 
    register: require('h2o2') 
}, function (err) { 

    if (err) { 
     console.log('Failed to load h2o2'); 
    } 

    server.start(function (err) { 

     console.log('Server started at: ' + server.info.uri); 
    }); 
}); 

その後、次のルートは、あなたの他のサーバーへのストリーム転送を始めるだろう。仕事にプロキシについて

{ 
    method: 'POST', 
    path: '/upload', 
    config: { 
     payload: { 
      output: 'stream', 
      parse: false, 
      allow: 'multipart/form-data', 
      maxBytes: 4194304 
     }, 
     auth: false 
    }, 
    handler: { 
     proxy: { 
      host: 'your.remote.server', 
      port: 'your-remote-port', 
      protocol: 'http' 
     } 
    } 
} 

を、parseプロキシサーバー上でfalseに設定する必要がありますが、実際にファイルを処理しているサーバー上でtrueに設定することができます。

この例を使用するには、両方のサーバーのパスが同じである必要があります。

関連する問題