mirror of
https://github.com/axios/axios.git
synced 2026-04-11 14:21:59 +08:00
When creating an AxiosError from an existing error without a response object, the status property from the source error is now preserved. This ensures error status information is not lost during error conversion. Fixes #7364 Co-authored-by: Jay <jasonsaayman@gmail.com>
91 lines
2.9 KiB
JavaScript
91 lines
2.9 KiB
JavaScript
'use strict';
|
|
|
|
import utils from '../utils.js';
|
|
|
|
class AxiosError extends Error {
|
|
static from(error, code, config, request, response, customProps) {
|
|
const axiosError = new AxiosError(error.message, code || error.code, config, request, response);
|
|
axiosError.cause = error;
|
|
axiosError.name = error.name;
|
|
|
|
// Preserve status from the original error if not already set from response
|
|
if (error.status != null && axiosError.status == null) {
|
|
axiosError.status = error.status;
|
|
}
|
|
|
|
customProps && Object.assign(axiosError, customProps);
|
|
return axiosError;
|
|
}
|
|
|
|
/**
|
|
* Create an Error with the specified message, config, error code, request and response.
|
|
*
|
|
* @param {string} message The error message.
|
|
* @param {string} [code] The error code (for example, 'ECONNABORTED').
|
|
* @param {Object} [config] The config.
|
|
* @param {Object} [request] The request.
|
|
* @param {Object} [response] The response.
|
|
*
|
|
* @returns {Error} The created error.
|
|
*/
|
|
constructor(message, code, config, request, response) {
|
|
super(message);
|
|
|
|
// Make message enumerable to maintain backward compatibility
|
|
// The native Error constructor sets message as non-enumerable,
|
|
// but axios < v1.13.3 had it as enumerable
|
|
Object.defineProperty(this, 'message', {
|
|
value: message,
|
|
enumerable: true,
|
|
writable: true,
|
|
configurable: true
|
|
});
|
|
|
|
this.name = 'AxiosError';
|
|
this.isAxiosError = true;
|
|
code && (this.code = code);
|
|
config && (this.config = config);
|
|
request && (this.request = request);
|
|
if (response) {
|
|
this.response = response;
|
|
this.status = response.status;
|
|
}
|
|
}
|
|
|
|
toJSON() {
|
|
return {
|
|
// Standard
|
|
message: this.message,
|
|
name: this.name,
|
|
// Microsoft
|
|
description: this.description,
|
|
number: this.number,
|
|
// Mozilla
|
|
fileName: this.fileName,
|
|
lineNumber: this.lineNumber,
|
|
columnNumber: this.columnNumber,
|
|
stack: this.stack,
|
|
// Axios
|
|
config: utils.toJSONObject(this.config),
|
|
code: this.code,
|
|
status: this.status,
|
|
};
|
|
}
|
|
}
|
|
|
|
// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.
|
|
AxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';
|
|
AxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';
|
|
AxiosError.ECONNABORTED = 'ECONNABORTED';
|
|
AxiosError.ETIMEDOUT = 'ETIMEDOUT';
|
|
AxiosError.ERR_NETWORK = 'ERR_NETWORK';
|
|
AxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';
|
|
AxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';
|
|
AxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';
|
|
AxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';
|
|
AxiosError.ERR_CANCELED = 'ERR_CANCELED';
|
|
AxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';
|
|
AxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';
|
|
|
|
export default AxiosError;
|