I_D*_*ing 12 proxy redirect hapijs
我正在使用hapi v6.11.1并且一直试图有条件地将来自我的hapi.js服务器的请求重定向到另一台服务器.这是我到目前为止所做的:
server.on('onRequest',function(request,reply) {
if(request.headers.customHeader) { // redirect only if header found
reply('custom header redirection').redirect('http://someurl.com');
return;
}
reply();
});
Run Code Online (Sandbox Code Playgroud)
但上面的解决方案将无法工作,仍然命中我的服务器而不是我指定的服务器.
我尝试在'onRequest'处理程序上执行reply.proxy()并得到以下错误:
错误:未捕获错误:如果解析了有效负载或输出不是流或数据,则无法进行代理
在尝试找出解决方案时,我从hapi.js文档中发现了以下内容:
仅在处理程序方法中可用,并且仅在reply(),reply.file(),reply.view(),reply.close(),reply.proxy()或reply.redirect()之一之前调用.
但问题是我有大约100条路线,我现在必须更改每个请求的处理程序以允许代理,如果我的条件得到满足,我不想这样做.
如果有以下任何一种可能,我会很高兴的:
将请求从'onResponse'重定向到另一个域,而不是更改处理函数.
服务器方法,可以允许我配置所有路由配置并在其上注入代理重定向.
谢谢.
好的,所以我想出了以下解决方案:
server.on('onRequest',function(request,reply) {
if(request.headers.customHeader) {
request.setUrl('/redirect');
}
reply();
});
Run Code Online (Sandbox Code Playgroud)
然后创建一个仅代理请求的路由处理程序:
{
method : '*',
path : '/redirect',
config : {
payload : {
output : 'stream',
parse : false,
},
handler : function(request,reply) {
var url = 'https://customUrl.com';
reply.proxy({'uri' : url, passThrough : true});
}
}
}
Run Code Online (Sandbox Code Playgroud)
在上面,我必须在“onResponse”上执行 setUrl,因为这是我可以按照 hapijs 文档执行此操作的唯一地方。其次,我在“/redirect”上传递了正确的值,以使代理重定向正常工作。
我仍然会等待能为我提供比这更好的解决方案的人。
归档时间: |
|
查看次数: |
1876 次 |
最近记录: |