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);