Подтвердить что ты не робот

Переадресация hapi.js из onRequest

Я использую 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();

});

но вышеприведенное решение не будет работать и по-прежнему удаляет мой сервер, а не тот, который я укажу.

Я попытался выполнить answer.proxy() в обработчике onRequest и получил следующую ошибку:

Ошибка: ошибка со сбоем: не может прокси-сервер, если обрабатывается полезная нагрузка, или если вывод не является потоком или данными

При попытке выяснить решение я натолкнулся на следующее из hapi.js docs:

Доступно только в методе обработчика и только перед одним из ответов(), reply.file(), reply.view(), reply.close(), reply.proxy() или reply.redirect().

но проблема в том, что у меня около 100 маршрутов, и теперь мне нужно будет изменить обработчик для каждого запроса, чтобы разрешить проксирование, если мое условие выполнено, что я не хочу делать.

Буду рад, если возможно одно из следующих:

  • Перенаправить запрос из "onResponse" в другой домен и не изменять функцию обработчика.

  • Серверный метод, который позволяет мне настроить всю конфигурацию маршрутов и ввести перенаправление прокси-сервера.

Спасибо.

4b9b3361

Ответ 1

Итак, я придумал следующее решение:

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

      }      
    }
}

В приведенном выше примере мне пришлось сделать setUrl в onResponse, потому что это единственное место, которое я могу сделать в соответствии с документами hapijs. Во-вторых, я передал правильные значения в '/redirect', чтобы перенаправить перенаправление прокси.

Я все равно буду ждать того, кто может предоставить мне лучшее решение, чем это.