From fb1c6bb3fb4c69b3292bcbce2ed0d89384a5fb17 Mon Sep 17 00:00:00 2001 From: Nikita Lutsenko Date: Sat, 20 Feb 2016 23:45:54 -0800 Subject: [PATCH 1/2] Add babel-polyfill to index.js. --- package.json | 1 + src/index.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index b627df5756..2d7fa619cf 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dependencies": { "apn": "^1.7.5", "aws-sdk": "~2.2.33", + "babel-polyfill": "^6.5.0", "babel-runtime": "^6.5.0", "bcrypt-nodejs": "0.0.3", "body-parser": "^1.14.2", diff --git a/src/index.js b/src/index.js index 6ff5bab74c..36f9428409 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,7 @@ // ParseServer - open-source compatible API Server for Parse apps +import 'babel-polyfill'; + var batch = require('./batch'), bodyParser = require('body-parser'), cache = require('./cache'), @@ -18,7 +20,6 @@ import { FilesController } from './Controllers/FilesController'; import ParsePushAdapter from './Adapters/Push/ParsePushAdapter'; import { PushController } from './Controllers/PushController'; - import { ClassesRouter } from './Routers/ClassesRouter'; import { InstallationsRouter } from './Routers/InstallationsRouter'; import { UsersRouter } from './Routers/UsersRouter'; From 04795ff165df7a68fbf19bfa801b28770d424b9e Mon Sep 17 00:00:00 2001 From: Nikita Lutsenko Date: Sat, 20 Feb 2016 23:46:05 -0800 Subject: [PATCH 2/2] 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 dfb3d9774b..9742f5f95e 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); });