diff --git a/spec/ParseAPI.spec.js b/spec/ParseAPI.spec.js index 8670bdd2be..10f6b5f60a 100644 --- a/spec/ParseAPI.spec.js +++ b/spec/ParseAPI.spec.js @@ -571,6 +571,35 @@ describe('miscellaneous', function() { done(); }); }); + + it('test cloud function query parameters', (done) => { + Parse.Cloud.define('echoParams', (req, res) => { + res.success(req.params); + }); + var headers = { + 'Content-Type': 'application/json', + 'X-Parse-Application-Id': 'test', + 'X-Parse-Javascript-Key': 'test' + }; + request.post({ + headers: headers, + url: 'http://localhost:8378/1/functions/echoParams', //?option=1&other=2 + qs: { + option: 1, + other: 2 + }, + body: '{"foo":"bar", "other": 1}' + }, (error, response, body) => { + expect(error).toBe(null); + var res = JSON.parse(body).result; + expect(res.option).toEqual('1'); + // Make sure query string params override body params + expect(res.other).toEqual('2'); + expect(res.foo).toEqual("bar"); + delete Parse.Cloud.Functions['echoParams']; + done(); + }); + }); it('test cloud function parameter validation success', (done) => { // Register a function with validation diff --git a/src/functions.js b/src/functions.js index f8b8fbc94c..c787a814f4 100644 --- a/src/functions.js +++ b/src/functions.js @@ -9,8 +9,11 @@ var router = new PromiseRouter(); function handleCloudFunction(req) { if (Parse.Cloud.Functions[req.params.functionName]) { + + const params = Object.assign({}, req.body, req.query); + if (Parse.Cloud.Validators[req.params.functionName]) { - var result = Parse.Cloud.Validators[req.params.functionName](req.body || {}); + var result = Parse.Cloud.Validators[req.params.functionName](params); if (!result) { throw new Parse.Error(Parse.Error.SCRIPT_FAILED, 'Validation failed.'); } @@ -19,7 +22,7 @@ function handleCloudFunction(req) { return new Promise(function (resolve, reject) { var response = createResponseObject(resolve, reject); var request = { - params: req.body || {}, + params: params, master: req.auth && req.auth.isMaster, user: req.auth && req.auth.user, installationId: req.info.installationId