Redirect 从onRequest重定向Hapi.js

Redirect 从onRequest重定向Hapi.js,redirect,proxy,hapijs,Redirect,Proxy,Hapijs,我正在使用hapiv6.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://someur

我正在使用hapiv6.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();

});
但是上面的解决方案不起作用,仍然会影响我的服务器,而不是我指定的服务器

我尝试对“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();
    });
    
    然后创建一个仅代理请求的路由处理程序:

    {
        method : '*',
        path : '/redirect',
        config : {
          payload : {
            output : 'stream',
            parse : false,
    
          },
          handler : function(request,reply) {
    
            var url = 'https://customUrl.com';
            reply.proxy({'uri' : url, passThrough : true});
    
          }      
        }
    }
    
    在上面,我必须在“onResponse”上创建一个setUrl,因为根据hapijs文档,这是我唯一可以这样做的地方。其次,我在'/redirect'上传递了适当的值,以使代理重定向正常工作


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

    您检查过请求对象中的标题了吗?是否到达指定重定向的块?