Express JS - определение общего маршрута конечной точки для прокси-трафика - PullRequest
0 голосов
/ 10 октября 2018

Я работаю над решением по тестированию, которое мультиплексирует несколько тестовых экземпляров за одним и тем же прокси-сервером. Решение, с которым мне поручено работать, заключается в реализации файла cookie только для HTTP, который используется для идентификации текущего идентификатора теста.

Этот файл cookie устанавливается путем перехвата трафика для различных внешних URI с уникальным путем к среде тестирования и телом JSON, содержащим идентификатор теста, а затем с набором заголовков файла cookie.

ЭтоЗатем cookie-файл идентификатора удаляется из любого исходящего трафика, чтобы не добавлять каких-либо необычных действий к серверам внешних ресурсов.

У меня есть экспресс-маршрутизатор, доступный мне, но я не могу слишком много возиться с экспресс-экземпляромсам по себе, поскольку через него будет проходить значительная часть переменного HTTP-трафика, следуя другим правилам, и хотя я могу получать запросы к локальным хостам нормально с моими первыми 2 маршрутами POST и видеть весь сетевой трафик нормально с общим последним маршрутом, третий (/proxy/tag-domain) никогда не попал.

В настоящее время яимеют следующие маршруты:

const serverMiddleware = () => {
  const router = new Router()
  router.use(cookieParser())
  router.use(bodyParser.json())
  router.post('/proxy/register-browser', (req, res) =>
    registerBrowser(req, res)
  )
  router.post('/proxy/register-domains', (req, res) =>
    registerDomains(req, res)
  )
  router.post('*/proxy/tag-domain', (req, res) =>
    tagDomain(req, res)
  )
  router.use((req, res, next) =>
    proxyWeb(req, res, next)
  )
  return router
}

Для контекста: register-browser, register-domains и tag-domain все используют одну и ту же клиентскую сторону обработчика извлечения, но register-browser и register-domains оба являются URI локального хоста и работаютбезупречно, извлекая данные из тела и отвечая соответствующими cookie-файлами или кодами ошибок.

Однако функция tagDomain(...), кажется, никогда не срабатывает, я пробовал /proxy/tag-domain, proxy/tag-domain, */proxy/tag-domainи *proxy/tag-domain.

Дальнейшее решение проблемы: я могу забрать трафик в конечном универсальном маршруте для передачи данных трафика обратно клиенту (функция proxyWeb(...)), однакоТело запроса отображается как пустой объект - в отличие от данных JSON, полученных в конечных точках после него, отправленных тем же обработчиком на стороне клиента.

Ведение журнала также показывает, что объект testId действительноприсутствует в запросе при запуске на стороне клиента.

Журнал клиента:

local-chrome - log -> 'registerDomains entered...'
local-chrome - log -> 'Browser is unregistered - Proceeding with Browser Registration.'
local-chrome - log -> 'Registering with Proxy...'
(1)
local-chrome - log -> 'Registering Domains:', ['https://srvr.net']
(2)
(3)
local-chrome - log -> 'Domain Registration Response: ', Object{testId: 'df87526a-0a82-5f2c-989c-4c717894576d'}
local-chrome - log -> 'Triggering Urls:', ['https://srvr.net']
(4)
local-chrome - log -> 'Sending TestID: ', '{"testId":"df87526a-0a82-5f2c-989c-4c717894576d"}'
(5)
local-chrome - error -> 'Test Level: Domain Tag Registration Failure:', TypeError: Failed to fetch

Журнал сервера:

(1)
>>> Register: http://localhost:9876/proxy/register-browser
>>> UUIDifying String:  -------127.0.0.1
>>> UUIDifying String:  ----local-chrome
>>> Generated UUID:  415588b4-0f9c-56f6-8b2d-0da930031443
>>> Assigning ID:  415588b4-0f9c-56f6-8b2d-0da930031443
>>> Browser Registration Reponse Sent.
(2)
>>> Browser connected with ID:  415588b4-0f9c-56f6-8b2d-0da930031443
>>> Browser UUID: 415588b4-0f9c-56f6-8b2d-0da930031443
>>> Url Array: [ 'https://srvr.net' ]
>>> Registering URLS for Test ID:  df87526a-0a82-5f2c-989c-4c717894576d
>>> Known Urls:  { 'srvr.net': 
>>>    { 'df87526a-0a82-5f2c-989c-4c717894576d': '415588b4-0f9c-56f6-8b2d-0da930031443' } }
>>> Preparing Successful Response Data...
>>> Preparing Domains Response...
>>> Domains Registration Reponse Sent.
(3)
(4)
>>> ProxyWeb handling:  https://srvr.net/proxy/tag-domain
>>> with cookies:  {}
>>> No testId cookie - Ignoring request...
(5)

Числа ((1), (2) и т.д ...) перемежаютсячерез журналы находятся точки синхронизации, которые я добавил для ясности в этом вопросе, а не часть оригинальных журналов.

Есть ли какой-то тайный секрет маршрутизации для общих конечных точек в экспрессе, и мне нужно получитьжертвенная курица?

...