From 3888598e2cc7643a4bb0bdcf86dbae310abff08a 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 | 18 +++++++++++++----- 1 file changed, 13 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..fb4ffb97 100644 --- a/src/steps/pre-query/parse-request-primary.js +++ b/src/steps/pre-query/parse-request-primary.js @@ -22,14 +22,22 @@ 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 +50,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);