- Spec files
npm-axios
Describes: pkg:npm/axios@1.11.x
- Description
- Promise based HTTP client for the browser and node.js
- Author
- tessl
- Last updated
index.md docs/
1# Axios23Axios is a Promise-based HTTP client for the browser and Node.js. It provides a simple and consistent API for making HTTP requests with support for request and response interception, automatic request and response body transformation, cancellation, timeouts, and extensive configuration options.45## Package Information67- **Package Name**: axios8- **Package Type**: npm9- **Language**: JavaScript/TypeScript10- **Installation**: `npm install axios`1112## Core Imports1314```javascript15import axios from "axios";16```1718For CommonJS:1920```javascript21const axios = require("axios");22```2324Named imports:2526```javascript27import { Axios, AxiosError, CancelToken, AxiosHeaders } from "axios";28```2930## Basic Usage3132```javascript33import axios from "axios";3435// Simple GET request36const response = await axios.get("https://api.example.com/users");37console.log(response.data);3839// POST request with data40const newUser = await axios.post("https://api.example.com/users", {41name: "John Doe",42email: "john@example.com"43});4445// Request with custom configuration46const config = {47method: "get",48url: "https://api.example.com/data",49timeout: 5000,50headers: {51"Authorization": "Bearer token123"52}53};5455const result = await axios(config);56```5758## Architecture5960Axios is built around several key components:6162- **Default Instance**: Pre-configured instance accessible via the main export63- **Custom Instances**: User-created instances with custom defaults via `axios.create()`64- **Axios Class**: Core class providing HTTP methods and configuration management65- **Interceptor System**: Request/response interceptors for preprocessing and error handling66- **Adapter System**: Environment-specific request adapters (xhr, http, fetch)67- **Cancellation System**: Token-based request cancellation with CancelToken68- **Configuration Merging**: Hierarchical config merging from defaults, instance, and request level69- **Error Handling**: Structured error objects with detailed context and error codes7071## Capabilities7273### HTTP Client Instance7475Core HTTP client functionality providing all standard HTTP methods with Promise-based responses. The main axios export is a pre-configured instance ready for immediate use.7677```javascript { .api }78// Default axios instance - function interface79axios(config: AxiosRequestConfig): Promise<AxiosResponse>;80axios(url: string, config?: AxiosRequestConfig): Promise<AxiosResponse>;8182// HTTP method shortcuts83axios.get(url: string, config?: AxiosRequestConfig): Promise<AxiosResponse>;84axios.post(url: string, data?: any, config?: AxiosRequestConfig): Promise<AxiosResponse>;85axios.put(url: string, data?: any, config?: AxiosRequestConfig): Promise<AxiosResponse>;86axios.patch(url: string, data?: any, config?: AxiosRequestConfig): Promise<AxiosResponse>;87axios.delete(url: string, config?: AxiosRequestConfig): Promise<AxiosResponse>;88axios.head(url: string, config?: AxiosRequestConfig): Promise<AxiosResponse>;89axios.options(url: string, config?: AxiosRequestConfig): Promise<AxiosResponse>;9091// Form-based methods92axios.postForm(url: string, data?: any, config?: AxiosRequestConfig): Promise<AxiosResponse>;93axios.putForm(url: string, data?: any, config?: AxiosRequestConfig): Promise<AxiosResponse>;94axios.patchForm(url: string, data?: any, config?: AxiosRequestConfig): Promise<AxiosResponse>;95```9697[HTTP Client](./http-client.md)9899### Instance Creation and Configuration100101Create custom axios instances with their own configuration defaults, useful for different APIs or environments.102103```javascript { .api }104axios.create(config?: CreateAxiosDefaults): AxiosInstance;105106interface CreateAxiosDefaults {107baseURL?: string;108timeout?: number;109headers?: RawAxiosRequestHeaders | AxiosHeaders;110// ... other AxiosRequestConfig properties111}112```113114[Instance Management](./instance-management.md)115116### Request and Response Interception117118Intercept requests and responses to transform data, add authentication, handle errors, or implement retry logic.119120```javascript { .api }121// Available on any axios instance122axios.interceptors.request.use(123onFulfilled?: (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig | Promise<InternalAxiosRequestConfig>,124onRejected?: (error: any) => any,125options?: AxiosInterceptorOptions126): number;127128axios.interceptors.response.use(129onFulfilled?: (response: AxiosResponse) => AxiosResponse | Promise<AxiosResponse>,130onRejected?: (error: any) => any131): number;132133interface AxiosInterceptorOptions {134synchronous?: boolean;135runWhen?: (config: InternalAxiosRequestConfig) => boolean;136}137```138139[Interceptors](./interceptors.md)140141### Request Cancellation142143Cancel HTTP requests using tokens or AbortSignal to prevent unnecessary network usage and handle component cleanup.144145```javascript { .api }146// CancelToken-based cancellation147const CancelToken = axios.CancelToken;148const source = CancelToken.source();149150axios.get(url, { cancelToken: source.token });151source.cancel("Operation canceled");152153// AbortSignal-based cancellation (modern approach)154const controller = new AbortController();155axios.get(url, { signal: controller.signal });156controller.abort();157```158159[Request Cancellation](./cancellation.md)160161### Error Handling162163Structured error handling with detailed error information, error codes, and type checking utilities.164165```javascript { .api }166// Error checking167axios.isAxiosError(error: any): boolean;168axios.isCancel(error: any): boolean;169170// Error classes171class AxiosError extends Error {172config?: InternalAxiosRequestConfig;173code?: string;174request?: any;175response?: AxiosResponse;176isAxiosError: boolean;177status?: number;178}179180class CanceledError extends AxiosError {}181```182183[Error Handling](./error-handling.md)184185### Headers Management186187Advanced header manipulation with type-safe operations and automatic content-type handling.188189```javascript { .api }190class AxiosHeaders {191constructor(headers?: RawAxiosHeaders | AxiosHeaders | string);192193set(headerName: string, value: AxiosHeaderValue, rewrite?: boolean): AxiosHeaders;194get(headerName: string, parser?: RegExp): RegExpExecArray | null;195has(header: string, matcher?: AxiosHeaderMatcher): boolean;196delete(header: string | string[], matcher?: AxiosHeaderMatcher): boolean;197198// Specialized methods199setContentType(value: ContentType, rewrite?: boolean): AxiosHeaders;200setAuthorization(value: AxiosHeaderValue, rewrite?: boolean): AxiosHeaders;201}202```203204[Headers Management](./headers.md)205206### Data Transformation and Serialization207208Convert between different data formats including FormData, JSON, and URL-encoded data with extensive serialization options.209210```javascript { .api }211// Form data conversion212axios.toFormData(sourceObj: object, targetFormData?: GenericFormData, options?: FormSerializerOptions): GenericFormData;213axios.formToJSON(form: GenericFormData | GenericHTMLFormElement): object;214215// Configuration merging216axios.mergeConfig(config1: AxiosRequestConfig, config2: AxiosRequestConfig): AxiosRequestConfig;217218// Adapter selection219axios.getAdapter(adapters: AxiosAdapterConfig | AxiosAdapterConfig[]): AxiosAdapter;220```221222[Data Transformation](./data-transformation.md)223224### Utility Functions225226Helper functions for common operations and compatibility with Promise patterns.227228```javascript { .api }229/**230* Spread array of responses into separate arguments (Promise.all helper)231* @param callback - Function to call with spread arguments232* @returns Function that takes array and spreads it to callback233*/234axios.spread<T, R>(callback: (...args: T[]) => R): (array: T[]) => R;235236/**237* Execute multiple requests concurrently (wrapper for Promise.all)238* @param promises - Array of axios request promises239* @returns Promise resolving to array of responses240*/241axios.all<T>(promises: Array<T | Promise<T>>): Promise<T[]>;242```243244**Usage Examples:**245246```javascript247import axios from "axios";248249// Using spread to handle multiple concurrent requests250function getUserData(userIds) {251const requests = userIds.map(id => axios.get(`/users/${id}`));252253return axios.all(requests)254.then(axios.spread((user1, user2, user3) => {255// Each parameter is a response object256console.log("User 1:", user1.data);257console.log("User 2:", user2.data);258console.log("User 3:", user3.data);259return [user1.data, user2.data, user3.data];260}));261}262263// Modern async/await alternative264async function getUserDataModern(userIds) {265const requests = userIds.map(id => axios.get(`/users/${id}`));266const responses = await axios.all(requests);267return responses.map(response => response.data);268}269```270271### Version Information272273Access to the current axios library version.274275```javascript { .api }276/**277* Current axios library version string278*/279axios.VERSION: string;280```281282**Usage Examples:**283284```javascript285console.log("Using axios version:", axios.VERSION); // "1.11.0"286287// Useful for debugging or feature detection288if (axios.VERSION >= "1.0.0") {289// Use modern axios features290}291```292293### HTTP Status Codes294295Comprehensive enum of HTTP status codes with both numeric and named access.296297```javascript { .api }298enum HttpStatusCode {299// 1xx Informational300Continue = 100,301SwitchingProtocols = 101,302Processing = 102,303EarlyHints = 103,304305// 2xx Success306Ok = 200,307Created = 201,308Accepted = 202,309NoContent = 204,310PartialContent = 206,311312// 3xx Redirection313MultipleChoices = 300,314MovedPermanently = 301,315Found = 302,316SeeOther = 303,317NotModified = 304,318TemporaryRedirect = 307,319PermanentRedirect = 308,320321// 4xx Client Error322BadRequest = 400,323Unauthorized = 401,324Forbidden = 403,325NotFound = 404,326MethodNotAllowed = 405,327RequestTimeout = 408,328Conflict = 409,329Gone = 410,330PreconditionFailed = 412,331PayloadTooLarge = 413,332UnsupportedMediaType = 415,333ImATeapot = 418,334UnprocessableEntity = 422,335TooManyRequests = 429,336337// 5xx Server Error338InternalServerError = 500,339NotImplemented = 501,340BadGateway = 502,341ServiceUnavailable = 503,342GatewayTimeout = 504343// ... includes all standard HTTP status codes344}345```346347**Usage Examples:**348349```javascript350import axios, { HttpStatusCode } from "axios";351352try {353const response = await axios.get("/api/data");354355if (response.status === HttpStatusCode.Ok) {356console.log("Success:", response.data);357}358} catch (error) {359if (error.response?.status === HttpStatusCode.NotFound) {360console.log("Resource not found");361} else if (error.response?.status === HttpStatusCode.Unauthorized) {362console.log("Authentication required");363} else if (error.response?.status >= HttpStatusCode.InternalServerError) {364console.log("Server error occurred");365}366}367368// Use in status validation369const api = axios.create({370validateStatus: (status) => status < HttpStatusCode.InternalServerError371});372```373374## Types375376```javascript { .api }377interface AxiosRequestConfig<D = any> {378// Core request settings379url?: string;380method?: Method;381baseURL?: string;382data?: D;383params?: any;384385// Headers and authentication386headers?: RawAxiosRequestHeaders | AxiosHeaders;387auth?: AxiosBasicCredentials;388withCredentials?: boolean;389390// Data transformation391transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[];392transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[];393paramsSerializer?: ParamsSerializerOptions | CustomParamsSerializer;394395// Response handling396responseType?: ResponseType;397responseEncoding?: responseEncoding;398timeout?: number;399timeoutErrorMessage?: string;400validateStatus?: (status: number) => boolean;401402// Progress tracking403onUploadProgress?: (progressEvent: AxiosProgressEvent) => void;404onDownloadProgress?: (progressEvent: AxiosProgressEvent) => void;405406// Request/Response size limits407maxContentLength?: number;408maxBodyLength?: number;409maxRedirects?: number;410maxRate?: number;411412// Networking413proxy?: AxiosProxyConfig | false;414httpAgent?: any;415httpsAgent?: any;416socketPath?: string | null;417418// Security419xsrfCookieName?: string;420xsrfHeaderName?: string;421withXSRFToken?: boolean | ((config: InternalAxiosRequestConfig) => boolean | Promise<boolean>);422423// Cancellation424cancelToken?: CancelToken;425signal?: GenericAbortSignal;426427// Advanced options428adapter?: AxiosAdapterConfig | AxiosAdapterConfig[];429decompress?: boolean;430transitional?: TransitionalOptions;431insecureHTTPParser?: boolean;432env?: { FormData?: new (...args: any[]) => object };433formSerializer?: FormSerializerOptions;434435// Node.js specific436lookup?: LookupAddress | LookupAddressEntry[];437family?: AddressFamily | undefined;438439// Browser specific440fetchOptions?: Record<string, any>;441}442443interface AxiosResponse<T = any> {444data: T;445status: number;446statusText: string;447headers: RawAxiosResponseHeaders | AxiosResponseHeaders;448config: InternalAxiosRequestConfig;449request?: any;450}451452type Method = 'get' | 'GET' | 'delete' | 'DELETE' | 'head' | 'HEAD' | 'options' | 'OPTIONS'453| 'post' | 'POST' | 'put' | 'PUT' | 'patch' | 'PATCH';454455type ResponseType = 'arraybuffer' | 'blob' | 'document' | 'json' | 'text' | 'stream' | 'formdata';456457interface AxiosProgressEvent {458loaded: number;459total?: number;460progress?: number;461bytes: number;462rate?: number;463estimated?: number;464upload?: boolean;465download?: boolean;466event?: BrowserProgressEvent;467lengthComputable: boolean;468}469470interface TransitionalOptions {471silentJSONParsing?: boolean;472forcedJSONParsing?: boolean;473clarifyTimeoutError?: boolean;474}475476interface AxiosBasicCredentials {477username: string;478password: string;479}480481interface AxiosProxyConfig {482host: string;483port: number;484auth?: AxiosBasicCredentials;485protocol?: string;486}487488interface ParamsSerializerOptions {489dots?: boolean;490indexes?: boolean | null;491encode?: (value: any, defaultEncoder: (value: any) => any) => any;492serialize?: (params: Record<string, any>, options?: ParamsSerializerOptions) => string;493}494```