developit / redaxios

The Axios API, as an 800 byte Fetch wrapper.

Home Page:https://npm.im/redaxios

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Response Parsing Error when Status Code is 204 (No Content)

jopms opened this issue · comments

Problem:
Currently, the response from an HTTP request is being parsed, regardless of the status code. This behavior leads to the following error in the browser's debugger menu: "SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data" when the status code is 204 (No Content). The error is triggered in Firefox.

Expected Behavior:
The parsing of the response data should only occur when the status code is not 204. When the status code is 204, the response should be left unparsed.

Steps to Reproduce:

  1. Perform an HTTP request that returns a status code of 204.
  2. Observe the error in the browser's debugger menu.

Code Segment:

return res[options.responseType || 'text']()
    .then((data) => {
        response.data = data;
        // its okay if this fails: response.data will be the unparsed value:
        response.data = JSON.parse(data);
    })
    .catch(Object)
    .then(() => {
        const ok = options.validateStatus ? options.validateStatus(res.status) : res.ok;
        return ok ? response : Promise.reject(response);
    });

Possible Solution:
To resolve this issue, you could modify the code to conditionally parse the response data based on the status code.

Additional Information:

  • Browser/Environment: Firefox
  • Redaxios Version: 0.5.1

did you tried to write interceptor for that?

function ResponseInterceptor(response: AxiosResponse) {
	if (response.status === 204) {
		response.data = null
	}

	return response
}

async function ResponseErrorInterceptor(error: AxiosError) {
	return Promise.reject(error)
}

axios.interceptors.response.use(ResponseInterceptor, ResponseErrorInterceptor)