generated from apollographql/typescript-repo-template
    
        
        - 
                Notifications
    
You must be signed in to change notification settings  - Fork 23
 
Open
Description
My back-end returns JSON data with a content-header that contains the suffix +json'and the charset=utf-8'
The content-type is not recognized as JSON and the body is returned as a plain string instead of JSON.
The problem is the way that the Content-Type header is parsed:
Content-Type: application/whatever+json;charset=utf-8
This is the method for parsing the header (and the body):
  protected parseBody(response: FetcherResponse): Promise<object | string> {
    const contentType = response.headers.get('Content-Type');
    const contentLength = response.headers.get('Content-Length');
    if (
      // As one might expect, a "204 No Content" is empty! This means there
      // isn't enough to `JSON.parse`, and trying will result in an error.
      response.status !== 204 &&
      contentLength !== '0' &&
      contentType &&
      (contentType.startsWith('application/json') ||
        contentType.endsWith('+json'))
    ) {
      return response.json();
    } else {
      return response.text();
    }
  }
The condition for checking on JSON fails, because:
contentType.endsWith('+json')
is false in the case that there is a charset defined at the end of the header
Metadata
Metadata
Assignees
Labels
No labels