Hapijs将流转发到另一台服务器
问题描述:
我尝试通过流将图像上传到我的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没有保存临时文件)?
感谢
答
这是诸如此类的事情,该插件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
。
对于此示例,两台服务器上的路径必须相同。