rest-api-handler
Version:
Handler for REST APIs
53 lines (42 loc) • 1.25 kB
JavaScript
/**
* Processor provider that process response from API and throw custom Exception.
*/
class DefaultResponseProcessor {
/**
* Constructor.
*
* @param Exception - Exception class that will be throwed if request fails.
* @param decoder - Define custom response body decoder.
*/
constructor(Exception, decoder) {
this.Exception = Exception;
this.decoder = decoder || DefaultResponseProcessor.decodeResponse;
}
async processResponse(response, request) {
const decodedResponse = await this.decoder(response);
const toRespond = {
data: decodedResponse,
status: response.status,
source: response,
request
};
if (!response.ok) {
throw new this.Exception(toRespond, request);
}
return toRespond;
}
static decodeResponse(response) {
const contentType = response.headers.get('content-type'); // on default decode response as text
if (!contentType) {
return response.text();
}
if (contentType.includes('json')) {
return response.json();
}
if (contentType.includes('text') || contentType.includes('xml')) {
return response.text();
}
return response.blob();
}
}
export { DefaultResponseProcessor as default };