Skip to content

Commit

Permalink
Initial friendly error message proposal
Browse files Browse the repository at this point in the history
  • Loading branch information
nikz committed Nov 13, 2015
1 parent f41220d commit ae94a31
Showing 1 changed file with 43 additions and 5 deletions.
48 changes: 43 additions & 5 deletions addon/adapters/rest-adapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -743,18 +743,20 @@ export default Adapter.extend(BuildURLMixin, {
@param {Number} status
@param {Object} headers
@param {Object} payload
@param {Object} requestData - the original request information
@return {Object | DS.AdapterError} response
*/
handleResponse: function(status, headers, payload) {
handleResponse: function(status, headers, payload, requestData) {
if (this.isSuccess(status, headers, payload)) {
return payload;
} else if (this.isInvalid(status, headers, payload)) {
return new InvalidError(payload.errors);
}

let errors = this.normalizeErrorResponse(status, headers, payload);
let errors = this.normalizeErrorResponse(status, headers, payload);
let detailedMessage = this.generatedDetailedMessage(status, headers, payload, requestData);

return new AdapterError(errors);
return new AdapterError(errors, detailedMessage);
},

/**
Expand Down Expand Up @@ -812,6 +814,11 @@ export default Adapter.extend(BuildURLMixin, {
ajax: function(url, type, options) {
var adapter = this;

var requestData = {
url: url,
method: type
};

return new Ember.RSVP.Promise(function(resolve, reject) {
var hash = adapter.ajaxOptions(url, type, options);

Expand All @@ -820,7 +827,8 @@ export default Adapter.extend(BuildURLMixin, {
let response = adapter.handleResponse(
jqXHR.status,
parseResponseHeaders(jqXHR.getAllResponseHeaders()),
payload
payload,
requestData
);

if (response instanceof AdapterError) {
Expand All @@ -844,7 +852,8 @@ export default Adapter.extend(BuildURLMixin, {
error = adapter.handleResponse(
jqXHR.status,
parseResponseHeaders(jqXHR.getAllResponseHeaders()),
adapter.parseErrorResponse(jqXHR.responseText) || errorThrown
adapter.parseErrorResponse(jqXHR.responseText) || errorThrown,
requestData
);
}
}
Expand Down Expand Up @@ -922,6 +931,35 @@ export default Adapter.extend(BuildURLMixin, {
}
];
}
},

/**
Generates a detailed ("friendly") error message, with plenty
of information for debugging (good luck!)
@method generatedDetailedMessage
@private
@param {Number} status
@param {Object} headers
@param {Object} payload
@return {Object} request information
*/
generatedDetailedMessage: function(status, headers, payload, requestData) {
var shortenedPayload;
var payloadContentType = headers["Content-Type"] || "Empty Content-Type";

if (payloadContentType === "text/html" && payload.length > 250) {
shortenedPayload = "[Omitted Lengthy HTML]";
} else {
shortenedPayload = payload;
}

var requestDescription = requestData.method + ' ' + requestData.url;
var payloadDescription = 'Payload (' + payloadContentType + ')';

return ['Ember Data Request ' + requestDescription + ' returned a ' + status,
payloadDescription,
shortenedPayload].join('\n');
}
});

Expand Down

0 comments on commit ae94a31

Please sign in to comment.