2017-04-20 27 views
0

我尝试通过流将图像上传到我的Hapijs服务器,并将数据发送(管道)到另一个Hapijs实例。Hapijs将流转发到另一台服务器

所以我有这个帖子路线,这应该接收流,并将它转发:

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)); 
       }); 
       } 
      } 
     }) 

我在其他服务器上的路线是这样的:

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); 
      } 
     }); 

当我运行的代码我总是得到这个回应:

{ 
    "statusCode": 400, 
    "error": "Bad Request", 
    "message": "Invalid multipart payload format" 
} 

怎么可能转发一个流到另一个hapijs服务器(w没有保存临时文件)?

感谢

回答

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

对于此示例,两台服务器上的路径必须相同。

相关问题