javascript – Getting TypeError: failed to fetch when the request hasnt actually failed

javascript – Getting TypeError: failed to fetch when the request hasnt actually failed

The issue could be with the response you are receiving from back-end. If it was working fine on the server then the problem could be with the response headers.
Check the Access-Control-Allow-Origin in the response headers. Usually reacts fetch API will throw fail to fetch even after receiving response when the response headers Access-Control-Allow-Origin and the origin of request wont match.

I understand this question might have a React-specific cause, but it shows up first in search results for Typeerror: Failed to fetch and I wanted to lay out all possible causes here.

The Fetch spec lists times when you throw a TypeError from the Fetch API: https://fetch.spec.whatwg.org/#fetch-api

Relevant passages as of January 2021 are below. These are excerpts from the text.

4.6 HTTP-network fetch

To perform an HTTP-network fetch using request with an optional credentials flag, run these steps:

16. Run these steps in parallel:

2. If aborted, then:

3. Otherwise, if stream is readable, error stream with a TypeError.

To append a name/value name/value pair to a Headers object (headers), run these steps:

  1. Normalize value.
  2. If name is not a name or value is not a value, then throw a TypeError.
  3. If headers’s guard is immutable, then throw a TypeError.

Filling Headers object headers with a given object object:

To fill a Headers object headers with a given object object, run these steps:

  1. If object is a sequence, then for each header in object:
    1. If header does not contain exactly two items, then throw a TypeError.

Method steps sometimes throw TypeError:

The delete(name) method steps are:

  1. If name is not a name, then throw a TypeError.
  2. If this’s guard is immutable, then throw a TypeError.

The get(name) method steps are:

  1. If name is not a name, then throw a TypeError.
  2. Return the result of getting name from this’s header list.

The has(name) method steps are:

  1. If name is not a name, then throw a TypeError.

The set(name, value) method steps are:

  1. Normalize value.
  2. If name is not a name or value is not a value, then throw a TypeError.
  3. If this’s guard is immutable, then throw a TypeError.

To extract a body and a Content-Type value from object, with an optional boolean keepalive (default false), run these steps:

5. Switch on object:

ReadableStream
If keepalive is true, then throw a TypeError.
If object is disturbed or locked, then throw a TypeError.

In the section Body mixin if you are using FormData there are several ways to throw a TypeError. I havent listed them here because it would make this answer very long. Relevant passages: https://fetch.spec.whatwg.org/#body-mixin

In the section Request Class the new Request(input, init) constructor is a minefield of potential TypeErrors:

The new Request(input, init) constructor steps are:

6. If input is a string, then:

2. If parsedURL is a failure, then throw a TypeError.
3. IF parsedURL includes credentials, then throw a TypeError.

11. If init[window] exists and is non-null, then throw a TypeError.

15. If init[referrer exists, then:

1. Let referrer be init[referrer].
2. If referrer is the empty string, then set request’s referrer to no-referrer.
3. Otherwise:
1. Let parsedReferrer be the result of parsing referrer with baseURL.
2. If parsedReferrer is failure, then throw a TypeError.

18. If mode is navigate, then throw a TypeError.

23. If requests cache mode is only-if-cached and requests mode is not same-origin then throw a TypeError.

27. If init[method] exists, then:

2. If method is not a method or method is a forbidden method, then throw a TypeError.

32. If this’s request’s mode is no-cors, then:
1. If this’s request’s method is not a CORS-safelisted method, then throw a TypeError.

35. If either init[body] exists and is non-null or inputBody is non-null, and request’s method is GET or HEAD, then throw a TypeError.

38. If body is non-null and bodys source is null, then:
1. If this’s request’s mode is neither same-origin nor cors, then throw a TypeError.

39. If inputBody is body and input is disturbed or locked, then throw a TypeError.

The clone() method steps are:

  1. If this is disturbed or locked, then throw a TypeError.

In the Response class:

The new Response(body, init) constructor steps are:

2. If init[statusText] does not match the reason-phrase token production, then throw a TypeError.

8. If body is non-null, then:
1. If init[status] is a null body status, then throw a TypeError.

The static redirect(url, status) method steps are:

2. If parsedURL is failure, then throw a TypeError.

The clone() method steps are:

  1. If this is disturbed or locked, then throw a TypeError.

In section The Fetch method

The fetch(input, init) method steps are:

9. Run the following in parallel:
To process response for response, run these substeps:

3. If response is a network error, then reject p with a TypeError and terminate these substeps.

In addition to these potential problems, there are some browser-specific behaviors which can throw a TypeError. For instance, if you set keepalive to true and have a payload > 64 KB youll get a TypeError on Chrome, but the same request can work in Firefox. These behaviors arent documented in the spec, but you can find information about them by Googling for limitations for each option youre setting in fetch.

javascript – Getting TypeError: failed to fetch when the request hasnt actually failed

I know its a relative old post but, I would like to share what worked for me:
Ive simply input http:// before localhost in the url. Hope it helps somebody.

Leave a Reply

Your email address will not be published.