From a85ea502447cee3e8068ea018704efe8fd5392e5 Mon Sep 17 00:00:00 2001 From: Carl Bennett Date: Mon, 31 Aug 2015 09:01:33 +1200 Subject: [PATCH] Improve error handling for poorly formed relationships Tells the user what they did wrong when they forget to wrap their relationship changes in a `{ data: ... }` object --- src/steps/pre-query/parse-request-primary.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/steps/pre-query/parse-request-primary.js b/src/steps/pre-query/parse-request-primary.js index 9ead5de0..f3e868f3 100644 --- a/src/steps/pre-query/parse-request-primary.js +++ b/src/steps/pre-query/parse-request-primary.js @@ -22,14 +22,24 @@ export default function(data, parseAsLinkage) { } catch (error) { - const title = "The resources you provided could not be parsed."; - const details = `The precise error was: "${error.message}".`; - reject(new APIError(400, undefined, title, details)); + if (error instanceof APIError) { + reject(error); + } + + else { + const title = "The resources you provided could not be parsed."; + const details = `The precise error was: "${error.message}".`; + reject(new APIError(400, undefined, title, details)); + } } }); } -function relationshipObjectFromJSON(json) { +function relationshipObjectFromJSON(json, relationship) { + if (typeof json.data === "undefined") { + throw new APIError(400, undefined, `No data key was found for the '${relationship}' relationship.`); + } + return new RelationshipObject(linkageFromJSON(json.data)); } @@ -42,7 +52,7 @@ function resourceFromJSON(json) { //build RelationshipObjects for(let key in relationships) { - relationships[key] = relationshipObjectFromJSON(relationships[key]); + relationships[key] = relationshipObjectFromJSON(relationships[key], key); } return new Resource(json.type, json.id, json.attributes, relationships, json.meta);