Added Server Response Error Handling

Presently the spee.ch client will error out if it received an unexpected response, resulting in hangs and a very vague JSON parsing error. This failsafe will catch the known issue of server request size limits causing 413 responses if misconfigured, making things easier to diagnose, as well as catching any other unexpected responses cleanly. Further specific behaviours can be added to ensure administrators spend less time debugging simple configuration issues.

The 413 error response should be fairly self explanatory, sufficient to not need further documentation, though adding an addendum to the README.md would aid other developers have a smooth experience.
This commit is contained in:
ProfessorDey 2019-05-30 14:33:53 +01:00 committed by GitHub
parent 68d2f303c1
commit 82ab3b47b1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -23,14 +23,29 @@ export const makePublishRequestChannel = (fd, isUpdate) => {
// set state change handler // set state change handler
xhr.onreadystatechange = () => { xhr.onreadystatechange = () => {
if (xhr.readyState === 4) { if (xhr.readyState === 4) {
const response = JSON.parse(xhr.response); switch (xhr.status) {
if ((xhr.status === 200) && response.success) { case 413:
emitter({success: response}); emitter({error: new Error("Unfortunately it appears this web server " +
emitter(END); "has been misconfigured, please inform the service administrators " +
} else { "that they must set their nginx/apache request size maximums higher " +
emitter({error: new Error(response.message)}); "than their file size limits.")});
emitter(END); emitter(END);
} break;
case 200:
var response = JSON.parse(xhr.response);
if (response.success) {
emitter({success: response});
emitter(END);
} else {
emitter({error: new Error(response.message)});
emitter(END);
}
break;
default:
emitter({error: new Error("Received an unexpected response from " +
"server: " + xhr.status)});
emitter(END);
}
} }
}; };
// open and send // open and send