Hapi.js从onRequest重定向

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条路线,我现在必须更改每个请求的处理程序以允许代理,如果我的条件得到满足,我不想这样做.

如果有以下任何一种可能,我会很高兴的:

  1. 将请求从'onResponse'重定向到另一个域,而不是更改处理函数.

  2. 服务器方法,可以允许我配置所有路由配置并在其上注入代理重定向.

谢谢.

I_D*_*ing 2

好的,所以我想出了以下解决方案:

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”上传递了正确的值,以使代理重定向正常工作。

我仍然会等待能为我提供比这更好的解决方案的人。