axios
Promise based HTTP client for the browser and node.js
Features
- Make XMLHttpRequests from the browser
- Make http requests from node.js
- Supports the Promise API
- Intercept request and response
- Transform request and response data
- Automatic transforms for JSON data
- Client side support for protecting against XSRF
Browser Support
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
---|---|---|---|---|---|
Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | Latest ✔ | 8+ ✔ |
Installing
Using cdn:
Using npm:
$ npm install axios
Using bower:
$ bower install axios
Example
Performing a GET
request
// Make a request for a user with a given IDaxios ; // Optionally the request above could also be done asaxios ;
Performing a POST
request
axios ;
Performing multiple concurrent requests
{ return axios;} { return axios;} axiosall ;
axios API
Requests can be made by passing the relevant config to axios
.
axios(config)
// Send a POST request;
axios(url[, config])
// Send a GET request (default method);
Request method aliases
For convenience aliases have been provided for all supported request methods.
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])
NOTE
When using the alias methods url
, method
, and data
properties don't need to be specified in config.
Concurrency
Helper functions for dealing with concurrent requests.
axios.all(iterable)
axios.spread(callback)
Creating an instance
You can create a new instance of axios with a custom config.
axios.create([config])
var instance = axios;
Instance methods
The available instance methods are listed below. The specified config will be merged with the instance config.
axios#request(config)
axios#get(url[, config])
axios#delete(url[, config])
axios#head(url[, config])
axios#post(url[, data[, config]])
axios#put(url[, data[, config]])
axios#patch(url[, data[, config]])
Request Config
These are the available config options for making requests. Only the url
is required. Requests will default to GET
if method
is not specified.
// `url` is the server URL that will be used for the request url: '/user' // `method` is the request method to be used when making the request method: 'get' // default // `baseURL` will be prepended to `url` unless `url` is absolute. // It can be convenient to set `baseURL` for an instance of axios to pass relative URLs // to methods of that instance. baseURL: 'https://some-domain.com/api/' // `transformRequest` allows changes to the request data before it is sent to the server // This is only applicable for request methods 'PUT', 'POST', and 'PATCH' // The last function in the array must return a string, an ArrayBuffer, or a Stream transformRequest: { // Do whatever you want to transform the data return data; } // `transformResponse` allows changes to the response data to be made before // it is passed to then/catch transformResponse: { // Do whatever you want to transform the data return data; } // `headers` are custom headers to be sent headers: 'X-Requested-With': 'XMLHttpRequest' // `params` are the URL parameters to be sent with the request params: ID: 12345 // `paramsSerializer` is an optional function in charge of serializing `params` // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/) { return Qs } // `data` is the data to be sent as the request body // Only applicable for request methods 'PUT', 'POST', and 'PATCH' // When no `transformRequest` is set, must be a string, an ArrayBuffer, a hash, or a Stream data: firstName: 'Fred' // `timeout` specifies the number of milliseconds before the request times out. // If the request takes longer than `timeout`, the request will be aborted. timeout: 1000 // `withCredentials` indicates whether or not cross-site Access-Control requests // should be made using credentials withCredentials: false // default // `adapter` allows custom handling of requests which makes testing easier. // Call `resolve` or `reject` and supply a valid response (see [response docs](#response-api)). { /* ... */ } // `auth` indicates that HTTP Basic auth should be used, and supplies credentials. // This will set an `Authorization` header, overwriting any existing // `Authorization` custom headers you have set using `headers`. auth: username: 'janedoe' password: 's00pers3cret' // `responseType` indicates the type of data that the server will respond with // options are 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream' responseType: 'json' // default // `xsrfCookieName` is the name of the cookie to use as a value for xsrf token xsrfCookieName: 'XSRF-TOKEN' // default // `xsrfHeaderName` is the name of the http header that carries the xsrf token value xsrfHeaderName: 'X-XSRF-TOKEN' // default // `progress` allows handling of progress events for 'POST' and 'PUT uploads' // as well as 'GET' downloads { // Do whatever you want with the native progress event } // `maxContentLength` defines the max size of the http response content allowed maxContentLength: 2000 // `validateStatus` defines whether to resolve or reject the promise for a given // HTTP response status code. If `validateStatus` returns `true` (or is set to `null` // or `undefined`), the promise will be resolved; otherwise, the promise will be // rejected. { return status >= 200 && status < 300; // default }
Response Schema
The response for a request contains the following information.
// `data` is the response that was provided by the server data: {} // `status` is the HTTP status code from the server response status: 200 // `statusText` is the HTTP status message from the server response statusText: 'OK' // `headers` the headers that the server responded with headers: {} // `config` is the config that was provided to `axios` for the request config: {}
When using then
or catch
, you will receive the response as follows:
axios ;
Config Defaults
You can specify config defaults that will be applied to every request.
Global axios defaults
axiosdefaultsbaseURL = 'https://api.example.com';axiosdefaultsheaderscommon'Authorization' = AUTH_TOKEN;axiosdefaultsheaderspost'Content-Type' = 'application/x-www-form-urlencoded';
Custom instance defaults
// Set config defaults when creating the instancevar instance = axios; // Alter defaults after instance has been createdinstancedefaultsheaderscommon'Authorization' = AUTH_TOKEN;
Config order of precedence
Config will be merged with an order of precedence. The order is library defaults found in lib/defaults.js
, then defaults
property of the instance, and finally config
argument for the request. The latter will take precedence over the former. Here's an example.
// Create an instance using the config defaults provided by the library// At this point the timeout config value is `0` as is the default for the libraryvar instance = axios; // Override timeout default for the library// Now all requests will wait 2.5 seconds before timing outinstancedefaultstimeout = 2500; // Override timeout for this request as it's known to take a long timeinstance;
Interceptors
You can intercept requests or responses before they are handled by then
or catch
.
// Add a request interceptoraxiosinterceptorsrequest; // Add a response interceptoraxiosinterceptorsresponse;
If you may need to remove an interceptor later you can.
var myInterceptor = axiosinterceptorsrequest;axiosinterceptorsrequest;
You can add interceptors to a custom instance of axios.
var instance = axios;instanceinterceptorsrequest;
Handling Errors
axios ;
You can define a custom HTTP status code error range using the validateStatus
config option.
axios
Semver
Until axios reaches a 1.0
release, breaking changes will be released with a new minor version. For example 0.5.1
, and 0.5.4
will have the same API, but 0.6.0
will have breaking changes.
Promises
axios depends on a native ES6 Promise implementation to be supported. If your environment doesn't support ES6 Promises, you can polyfill.
TypeScript
axios includes a TypeScript definition.
/// ;axios.get'/user?ID=12345';
Resources
Credits
axios is heavily inspired by the $http service provided in Angular. Ultimately axios is an effort to provide a standalone $http
-like service for use outside of Angular.
License
MIT