Создание "фильтра-прокси" в Node.js

У меня есть сервер elasticsearch, который я хотел бы запросить, но перед тем, как показать результат пользователю, я хочу отфильтровать результаты (поиск прав для пользователя в базе данных и т.д.).

Поэтому мне показалось, что я пишу прокси-сервер, который получает запрос поиска JSON POST и перенаправляет его на сервер Elasticsearch. Ответ с результатами теперь будет отправлен на "сервер фильтров". Этот сервер просматривает полученные json-данные в базе данных и удаляет результаты, которые пользователь не может видеть. Это отфильтрованное содержимое должно быть представлено пользователю.

Хорошо - это то, что я сделал:

var proxy = http.createServer(function (req, res){
 if(req.method == 'OPTIONS'){
 res.writeHead(200, {'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json; charset=UTF-8'});
 res.end();
 }

if(req.method == 'POST'){

 var searchOptions = {
 host: '10.0.10.1',
 port: 9200,
 method: 'POST',
 path: '/ltg_5096/_search'
 }

 var searchRequest = http.request(searchOptions, function(searchResponse){

 // this is the Request to the Elasticsearch Server...

 var filterOptions = {
 host: '127.0.0.1',
 port: 8080,
 method: 'POST',
 path: '/',
 headers: {
 'Content-Type': 'application/x-www-form-urlencoded'
 }
 }

 var filterRequest = http.request(filterOptions, function(filterResponse){
 // ?! This should be the request to the filter Server
 })

 searchResponse.pipe(res)
 res.writeHead(200, {'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json; charset=UTF-8'})
 })
 req.pipe(searchRequest)
 }
})

proxy.listen(9000)

Это прокси-сервер, но без части, где результаты фильтруются экземпляром фильтрации. Я много пробовал, но не мог заставить его работать, как я этого хочу. Надеюсь, кто-то может мне помочь!

1 ответ

Это то, что вам нужно:

https://github.com/lukas-vlcek/node.es

Это простой, но полезный прокси elasticsearch, построенный на node.js, прокси позволяет перехватывать и изменять запросы и ответы, определяя две функции:

var preRequest = function(request) {};
var postRequest = function(request, response, responseData){};
var proxyServer = proxyFactory.getProxy(preRequest, postRequest);
proxyServer.start();

Взгляните на этот пример:

https://github.com/lukas-vlcek/node.es/blob/master/proxy/proxy-example.js

licensed under cc by-sa 3.0 with attribution.