Fix passing parameters via URL query when querying for objects.

This commit is contained in:
Nikita Lutsenko
2016-02-20 23:46:05 -08:00
parent fb1c6bb3fb
commit 04795ff165

View File

@@ -7,12 +7,12 @@ import url from 'url';
export class ClassesRouter extends PromiseRouter { export class ClassesRouter extends PromiseRouter {
handleFind(req) { handleFind(req) {
let body = Object.assign(req.body, req.query); let body = Object.assign(req.body, ClassesRouter.JSONFromQuery(req.query));
let options = {}; let options = {};
let allowConstraints = ['skip', 'limit', 'order', 'count', 'keys', let allowConstraints = ['skip', 'limit', 'order', 'count', 'keys',
'include', 'redirectClassNameForKey', 'where']; 'include', 'redirectClassNameForKey', 'where'];
for (var key in body) { for (let key of Object.keys(body)) {
if (allowConstraints.indexOf(key) === -1) { if (allowConstraints.indexOf(key) === -1) {
throw new Parse.Error(Parse.Error.INVALID_QUERY, 'Improper encode of parameter'); throw new Parse.Error(Parse.Error.INVALID_QUERY, 'Improper encode of parameter');
} }
@@ -97,6 +97,18 @@ export class ClassesRouter extends PromiseRouter {
return {response: {}}; 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() { mountRoutes() {
this.route('GET', '/classes/:className', (req) => { return this.handleFind(req); }); this.route('GET', '/classes/:className', (req) => { return this.handleFind(req); });