From 04795ff165df7a68fbf19bfa801b28770d424b9e Mon Sep 17 00:00:00 2001 From: Nikita Lutsenko Date: Sat, 20 Feb 2016 23:46:05 -0800 Subject: [PATCH] Fix passing parameters via URL query when querying for objects. --- src/Routers/ClassesRouter.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Routers/ClassesRouter.js b/src/Routers/ClassesRouter.js index dfb3d977..9742f5f9 100644 --- a/src/Routers/ClassesRouter.js +++ b/src/Routers/ClassesRouter.js @@ -7,12 +7,12 @@ import url from 'url'; export class ClassesRouter extends PromiseRouter { handleFind(req) { - let body = Object.assign(req.body, req.query); + let body = Object.assign(req.body, ClassesRouter.JSONFromQuery(req.query)); let options = {}; let allowConstraints = ['skip', 'limit', 'order', 'count', 'keys', 'include', 'redirectClassNameForKey', 'where']; - for (var key in body) { + for (let key of Object.keys(body)) { if (allowConstraints.indexOf(key) === -1) { throw new Parse.Error(Parse.Error.INVALID_QUERY, 'Improper encode of parameter'); } @@ -97,6 +97,18 @@ export class ClassesRouter extends PromiseRouter { return {response: {}}; }); } + + static JSONFromQuery(query) { + let json = {}; + for (let [key, value] of Object.entries(query)) { + try { + json[key] = JSON.parse(value); + } catch (e) { + json[key] = value; + } + } + return json + } mountRoutes() { this.route('GET', '/classes/:className', (req) => { return this.handleFind(req); });