Переадресация 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" в другой домен и не изменять функцию обработчика.
-
Серверный метод, который позволяет мне настроить всю конфигурацию маршрутов и ввести перенаправление прокси-сервера.
Спасибо.
Ответы
Ответ 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', чтобы перенаправить перенаправление прокси.
Я все равно буду ждать того, кто может предоставить мне лучшее решение, чем это.