diff --git a/client/index.js b/client/index.js index 4e8966fd..496c5602 100644 --- a/client/index.js +++ b/client/index.js @@ -1,6 +1,8 @@ const validator = require('validator') const EventSource = require('eventsource') const superagent = require('superagent') +const url = require('url') +const querystring = require('querystring') class Client { constructor ({ source, target, logger = console }) { @@ -16,7 +18,13 @@ class Client { onmessage (msg) { const data = JSON.parse(msg.data) - const req = superagent.post(this.target).send(data.body) + const target = url.parse(this.target, true) + const mergedQuery = Object.assign(target.query, data.query) + target.search = querystring.stringify(mergedQuery) + + delete data.query + + const req = superagent.post(target).send(data.body) delete data.body diff --git a/client/test/index.test.js b/client/test/index.test.js index 2350d65e..e6a8698a 100644 --- a/client/test/index.test.js +++ b/client/test/index.test.js @@ -67,6 +67,25 @@ describe('client', () => { // Send request to proxy server await request(proxy).post(channel).send(payload).expect(200) }) + + test('POST /:channel forwards query string to target url', async (done) => { + const queryParams = { + param1: 'testData1', + param2: 'testData2' + } + + // Expect request to target + const forward = nock('http://example.com').post('/foo/bar').query(queryParams).reply(200) + + // Test is done when this is called + client.addEventListener('message', (msg) => { + expect(forward.isDone()).toBe(true) + done() + }) + + // Send request to proxy server with query string + await request(proxy).post(channel).query(queryParams).send() + }) }) describe('createChannel', () => { diff --git a/server/server.js b/server/server.js index fb207883..f9a4ba2d 100644 --- a/server/server.js +++ b/server/server.js @@ -89,6 +89,7 @@ module.exports = (testRoute) => { events.emit(req.params.channel, { ...req.headers, body: req.body, + query: req.query, timestamp: Date.now() }) res.status(200).end()