2015-07-16 28 views
11

Używam HAPI v6.11.1 i starali się warunkowo przekierować nadejścia żądania od mojego hapi.js serwera do innego serwera. To co ja TRIE tej pory:Hapi.js przekierowanie z onRequest

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

}); 

ale powyższe rozwiązanie nie będzie działać i nadal uderza mój serwer zamiast ten, podany przeze mnie.

Próbowałem robić reply.proxy() na przewodnika w 'onRequest' i uzyskałem następujący błąd:

Error: Uncaught o błędzie: Nie można proxy jeśli ładunek jest analizowany czy wyjście nie jest strumieniowo lub dane

starając się wymyślić rozwiązanie, natknąłem się na następujące z hapi.js docs:

Dostępne tylko w sposobie procedury obsługi i tylko przed jednym z post(), reply.file(), odpowiadanie. Metoda view(), reply.close(), reply.proxy() lub reply.redirect() jest wywoływana.

ale problem polega na tym, że mam około 100 tras i teraz będę musiał zmienić obsługę dla każdego żądania, aby umożliwić proxy, jeśli mój warunek jest spełniony, a nie chcę tego robić.

będę zadowolony, jeśli jest jeden z poniższych jest możliwe:

  1. Przekierowanie wniosek „onResponse” do innej domeny, a nie w celu zmiany funkcji obsługi.

  2. Metoda serwera, która pozwala mi skonfigurować konfigurację wszystkich tras i wprowadzić w tym celu przekierowanie proxy.

Dzięki.

+0

Czy sprawdziłeś nagłówki w obiekcie żądania? Czy blok, do którego zostało określone przekierowanie, został osiągnięty? – ZeMoon

Odpowiedz

2

Dobrze więc wymyśliłem następujące rozwiązanie:

server.on('onRequest',function(request,reply) { 
    if(request.headers.customHeader) { 
    request.setUrl('/redirect'); 
    } 
    reply(); 
}); 

a następnie stworzył obsługi trasy, który będzie po prostu proxy wniosek:

{ 
    method : '*', 
    path : '/redirect', 
    config : { 
     payload : { 
     output : 'stream', 
     parse : false, 

     }, 
     handler : function(request,reply) { 

     var url = 'https://customUrl.com'; 
     reply.proxy({'uri' : url, passThrough : true}); 

     }  
    } 
} 

w powyższym musiałem zrobić setUrl na "onResponse", ponieważ jest to jedyne miejsce, w którym mogę to zrobić zgodnie z dokumentacją hapijs. Po drugie przekazałem prawidłowe wartości w "/ przekierowaniu", aby przekierowanie proxy działało poprawnie.

Będę nadal czekał na kogoś, kto może zapewnić mi lepsze rozwiązanie niż to.