mirror of
https://github.com/axios/axios.git
synced 2026-04-11 14:21:59 +08:00
* fix: turn AxiosError into a native error (#5394) Being an object returned by the 'Error' constructor turns something into a 'native error'. * fix: simplify code in AxiosError * fix: simplify code in AxiosError * refactor: implement AxiosError as a class * refactor: implement CanceledError as a class This turns CanceledError into a native error. * refactor: simplify AxiosError.toJSON * fix: improve error code handling in `AxiosError.from` If no error code is provided, use the code from the underlying error. * fix: set error status in `AxiosError.constructor` If a response is passed to the constructor, set the response status as a property. * fix: remove unnecessary async --------- Co-authored-by: Jay <jasonsaayman@gmail.com>
74 lines
2.5 KiB
JavaScript
74 lines
2.5 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;
|
|
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);
|
|
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;
|