Express JS-为代理流量定义通用的端点路由

时间:2018-10-10 14:13:47

标签: javascript node.js express routes middleware

我正在研究一个在同一个代理后面复用多个测试实例的测试解决方案,我所负责的解决方案是实现一个仅HTTP的cookie,该cookie用于标识当前的测试ID。

通过设置测试框架所独有的路径和包含测试ID的JSON主体拦截各种外部URI的流量来设置此Cookie,然后以设置的cookie标头进行响应。

然后从任何传出流量中删除此ID cookie,以免向外部资源服务器添加任何异常行为。

我有一个Express路由器供我使用,但是我不能在Express实例本身上摆弄太多,因为遵循不同规则的大量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-browserregister-domainstag-domain都使用相同的Fetch处理程序客户端,但是register-browserregister-domains都是本地URI,并且可以正常工作,从正文中检索数据并使用适当的Cookie或错误代码进行响应。

但是,tagDomain(...)函数似乎从未触发,我已经尝试过/proxy/tag-domainproxy/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)等...)是为清楚起见我添加的同步点,而不是原始日志的一部分。

快速表达常见端点时是否存在奥秘秘诀,我需要获得一只牺牲鸡吗?

0 个答案:

没有答案