Fix content type of requests

Without this fix, a content type would be stored in the headers array
of the constant fetchOptions once they are set. This way they will be
used whenever no explicit content type is set, which is (and mus be)
the case for multipart form data.
This commit is contained in:
Rene Pfeuffer
2019-09-04 14:47:13 +02:00
parent 372e2eec6c
commit 199e1c2c20

View File

@@ -3,17 +3,16 @@ import { contextPath } from "./urls";
import { createBackendError, ForbiddenError, isBackendError, UnauthorizedError } from "./errors";
import type { BackendErrorContent } from "./errors";
const fetchOptions: RequestOptions = {
credentials: "same-origin",
headers: {
const applyFetchOptions: (RequestOptions) => RequestOptions = o => {
o.credentials = "same-origin";
o.headers = {
Cache: "no-cache",
// identify the request as ajax request
"X-Requested-With": "XMLHttpRequest"
}
};
return o;
};
function handleFailure(response: Response) {
if (!response.ok) {
if (isBackendError(response)) {
@@ -47,7 +46,7 @@ export function createUrl(url: string) {
class ApiClient {
get(url: string): Promise<Response> {
return fetch(createUrl(url), fetchOptions).then(handleFailure);
return fetch(createUrl(url), applyFetchOptions).then(handleFailure);
}
post(url: string, payload: any, contentType: string = "application/json") {
@@ -73,7 +72,7 @@ class ApiClient {
let options: RequestOptions = {
method: "HEAD"
};
options = Object.assign(options, fetchOptions);
options = applyFetchOptions(options);
return fetch(createUrl(url), options).then(handleFailure);
}
@@ -81,7 +80,7 @@ class ApiClient {
let options: RequestOptions = {
method: "DELETE"
};
options = Object.assign(options, fetchOptions);
options = applyFetchOptions(options);
return fetch(createUrl(url), options).then(handleFailure);
}
@@ -99,7 +98,7 @@ class ApiClient {
}
httpRequestWithBinaryBody(options: RequestOptions, url: string, contentType?: string) {
options = Object.assign(options, fetchOptions);
options = applyFetchOptions(options);
if (contentType) {
// $FlowFixMe
options.headers["Content-Type"] = contentType;