The basics of Axios
What is Axios?
Axios is an HTTP client developed based on Javascript Promise, it can be used in font-end applications Vue.js, React, Angular … Using Axios makes it easy to send asynchronous HTTP requests to REST endpoint and CRUD implementation.
We need to have the following concepts:
- An HTTP client is a piece of software, a library that can make HTTP requests to an HTTP server and receive responses. Simply put, it is closer to a web browser.
- Javascript Promise is an object that helps control the completion or failure of an asynchronous action in Javascript
- (refer to Knowledge of Javascript Promise).
- Vue.js, React, Angular are currently very hot Javascript frameworks that help build flexible font-end applications that are fast and powerful.
- REST endpoints are points (URLs) that provide API functions that allow us to interact with a system, for example when we want to interact with V1Study we can send HTTP requests to REST APIs provided by V1Study. level.
- CRUD stands for Create, Read, Update, and Delete is a programming term referring to four familiar methods when working with data warehouses.
In short, Axios is a “browser” in Javascript that helps us to manipulate websites or APIs that help build more flexible font-end applications.
Install Axios
The axios library can be installed through the npm tool:
1 2 3 4 | npm install axios |
Or insert Javascript file path on CDNs:
1 2 3 4 | <span class="token operator"><</span> script src <span class="token operator">=</span> <span class="token string">"https://unpkg.com/axios/dist/axios.min.js"</span> <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> script <span class="token operator">></span> |
If you use the Laravel framework, the Axios library is already pre-installed in the resources assets bootstrap.js file:
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token comment">/** * We'll load the axios HTTP library which allows us to easily issue requests * to our Laravel back-end. This library automatically handles sending the * CSRF token as a header based on the value of the "XSRF" token cookie. */</span> window <span class="token punctuation">.</span> axios <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'axios'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> window <span class="token punctuation">.</span> axios <span class="token punctuation">.</span> defaults <span class="token punctuation">.</span> headers <span class="token punctuation">.</span> common <span class="token punctuation">[</span> <span class="token string">'X-Requested-With'</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string">'XMLHttpRequest'</span> <span class="token punctuation">;</span> |
and just do npm install to install the pre-installed packages.
Method of sending HTTP request
The most commonly used HTTP methods for data mining are GET and POST. Axios has two methods to perform GET and POST data.
1 2 3 4 5 6 7 8 9 10 | axios <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string">'http://v1study.com/user?ID=12345'</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">response</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> response <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">catch</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">error</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> error <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
This code sends a request with the GET method to the URL http://v1study.com/user?ID=12345 , if successful the result will be printed to the console in .then () and if the error is printed to the console in .catch (). You can imagine it like opening a browser, typing in the desired URL and waiting, if the information is displayed you will be able to read it, otherwise an error message is displayed on the browser. Note, the parameter passed (query string) can take the parameter as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | axios <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string">'http://v1study.com/user'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> params <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token constant">ID</span> <span class="token operator">:</span> <span class="token number">12345</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">response</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> response <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">catch</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">error</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> error <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Next we see how to send data with POST method to a URL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | axios <span class="token punctuation">.</span> <span class="token function">post</span> <span class="token punctuation">(</span> <span class="token string">'http://v1study.com/user'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> name <span class="token operator">:</span> <span class="token string">'FirebirD'</span> <span class="token punctuation">,</span> email <span class="token operator">:</span> <span class="token string">' <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> '</span> <span class="token punctuation">,</span> password <span class="token operator">:</span> <span class="token string">'123456'</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">response</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> response <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">catch</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">error</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> error <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
The above code does the same as we open a new user creation form, enter the data and press the Submit button. Above we send single requests, what if we want to send many requests to retrieve data at the same time? The next example sends two requests, one for account information, and one for order information.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token keyword">function</span> <span class="token function">getAccountInfomation</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> axios <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string">'/account/12345'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">function</span> <span class="token function">getOrderInfomation</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> axios <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string">'/order/12345'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> axios <span class="token punctuation">.</span> <span class="token function">all</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token function">getAccountInfomation</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token function">getOrderInfomation</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> axios <span class="token punctuation">.</span> <span class="token function">spread</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">account <span class="token punctuation">,</span> order</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Cả hai yêu cầu được hoàn thành</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Other methods like DELETE, PUT, PATCH are also supported. You can see more in the Axios documentation. Next, we will learn how to add the configuration settings before sending the HTTP request (with the browser it is usually default so you do not notice).
1 2 3 4 | <span class="token function">axios</span> <span class="token punctuation">(</span> url <span class="token punctuation">[</span> <span class="token punctuation">,</span> config <span class="token punctuation">]</span> <span class="token punctuation">)</span> |
HTTP requests can be sent using the syntax above, which can be passed to the configuration in the config object as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | <span class="token punctuation">{</span> <span class="token comment">// URL đích đến của yêu cầu HTTP</span> url <span class="token operator">:</span> <span class="token string">'/user'</span> <span class="token punctuation">,</span> <span class="token comment">// Phương thức gửi yêu cầu có thể là GET, POST, DELETE, PUT...</span> method <span class="token operator">:</span> <span class="token string">'get'</span> <span class="token punctuation">,</span> <span class="token comment">// default</span> <span class="token comment">// URL cơ sở, nếu bạn có nhiều request đến một server sử dụng URL cơ sở để rút gọn tham số url ở trên</span> <span class="token comment">// URL cơ sở có thể thiết lập toàn cục để dùng lại sau này.</span> baseURL <span class="token operator">:</span> <span class="token string">'https://allaravel.com/api/'</span> <span class="token punctuation">,</span> <span class="token comment">// Thay đổi headers object của request.</span> transformRequest <span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">data <span class="token punctuation">,</span> headers</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Thực hiện thay đổi tại đây</span> <span class="token keyword">return</span> data <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token comment">// Thay đổi headers object của phần response</span> transformResponse <span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">data</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Thực hiện thay đổi tại đây</span> <span class="token keyword">return</span> data <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token comment">// Thiết lập các giá trị cho headers object.</span> headers <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">'X-Requested-With'</span> <span class="token operator">:</span> <span class="token string">'XMLHttpRequest'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token comment">// Thêm tham số vào query string</span> params <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token constant">ID</span> <span class="token operator">:</span> <span class="token number">12345</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token comment">// Cũng là tham số nhưng thêm vào body của request</span> data <span class="token operator">:</span> <span class="token punctuation">{</span> firstName <span class="token operator">:</span> <span class="token string">'Fred'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token comment">// Thiết lập thời gian chờ cho xử lý yêu cầu, nếu vượt quá sẽ hủy bỏ yêu cầu HTTP</span> timeout <span class="token operator">:</span> <span class="token number">1000</span> <span class="token punctuation">,</span> <span class="token comment">// Nhận diện yêu cầu là cross-site Access-Control hay không</span> withCredentials <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span> <span class="token comment">// default</span> <span class="token comment">// Nhận diện URL có cần xác thực hay không và gửi đi các thông tin để xác thực.</span> auth <span class="token operator">:</span> <span class="token punctuation">{</span> username <span class="token operator">:</span> <span class="token string">'janedoe'</span> <span class="token punctuation">,</span> password <span class="token operator">:</span> <span class="token string">'s00pers3cret'</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token comment">// Nhận diện dạng dữ liệu trả về từ server: arraybuffer, blob, document, json, text, stream</span> responseType <span class="token operator">:</span> <span class="token string">'json'</span> <span class="token punctuation">,</span> <span class="token comment">// mặc định</span> <span class="token comment">// `xsrfCookieName` is the name of the cookie to use as a value for xsrf token</span> xsrfCookieName <span class="token operator">:</span> <span class="token string">'XSRF-TOKEN'</span> <span class="token punctuation">,</span> <span class="token comment">// default</span> <span class="token comment">// `xsrfHeaderName` is the name of the http header that carries the xsrf token value</span> xsrfHeaderName <span class="token operator">:</span> <span class="token string">'X-XSRF-TOKEN'</span> <span class="token punctuation">,</span> <span class="token comment">// default</span> <span class="token comment">// Quản lý tiến trình upload</span> <span class="token function-variable function">onUploadProgress</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">progressEvent</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Do whatever you want with the native progress event</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token comment">// Quản lý tiến trình download</span> <span class="token function-variable function">onDownloadProgress</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">progressEvent</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Do whatever you want with the native progress event</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token comment">// Kích thước dữ liệu tối đa hồi đáp từ máy chủ</span> maxContentLength <span class="token operator">:</span> <span class="token number">2000</span> <span class="token punctuation">,</span> <span class="token comment">// Kiểm tra trạng thái</span> <span class="token function-variable function">validateStatus</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">status</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> status <span class="token operator">>=</span> <span class="token number">200</span> <span class="token operator">&&</span> status <span class="token operator"><</span> <span class="token number">300</span> <span class="token punctuation">;</span> <span class="token comment">// default</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token comment">// Số lần chuyển hướng cho phép khi gọi đến URL, nếu thiết lập 0 là không cho phép</span> maxRedirects <span class="token operator">:</span> <span class="token number">5</span> <span class="token punctuation">,</span> <span class="token comment">// mặc định</span> <span class="token comment">// `httpAgent` and `httpsAgent` define a custom agent to be used when performing http</span> httpAgent <span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">http <span class="token punctuation">.</span> Agent</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> keepAlive <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> httpsAgent <span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">https <span class="token punctuation">.</span> Agent</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> keepAlive <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token comment">// Thiết lập proxy</span> proxy <span class="token operator">:</span> <span class="token punctuation">{</span> host <span class="token operator">:</span> <span class="token string">'127.0.0.1'</span> <span class="token punctuation">,</span> port <span class="token operator">:</span> <span class="token number">9000</span> <span class="token punctuation">,</span> auth <span class="token operator">:</span> <span class="token punctuation">{</span> username <span class="token operator">:</span> <span class="token string">'mikeymike'</span> <span class="token punctuation">,</span> password <span class="token operator">:</span> <span class="token string">'rapunz3l'</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token comment">// Xác định cancel token sử dụng để hủy bỏ yêu cầu</span> cancelToken <span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">CancelToken</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">cancel</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> |
Responsive data structure
The response object returned from the server has the following structure:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <span class="token punctuation">{</span> <span class="token comment">// Dữ liệu cần lấy từ máy chủ</span> data <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token comment">// Mã trạng thái HTTP của yêu cầu</span> status <span class="token operator">:</span> <span class="token number">200</span> <span class="token punctuation">,</span> <span class="token comment">// Mô tả trạng thái tương ứng với mã trạng thái ở trên</span> statusText <span class="token operator">:</span> <span class="token string">'OK'</span> <span class="token punctuation">,</span> <span class="token comment">// Thông tin header của hồi đáp (response)</span> headers <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token comment">// config được thiết lập trước khi gửi request</span> config <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token comment">// là thực thể của ClientRequest nếu sử dụng Node.js và XMLHttpRequest trong trình duyệt</span> request <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
With this structure, when an HTTP request is sent to the server we can manage the information returned from the server, see the following example:
1 2 3 4 5 6 7 8 9 10 11 | axios <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string">'http://v1study.com/user/12345'</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">response</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> response <span class="token punctuation">.</span> data <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> response <span class="token punctuation">.</span> status <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> response <span class="token punctuation">.</span> statusText <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> response <span class="token punctuation">.</span> headers <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> response <span class="token punctuation">.</span> config <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Hook API
In the process of sending out a request, just before sending it we may wish to do some work or as soon as we receive the response. For example, if you want a status bar that shows the percentage of work in progress, you need to know when to send the request and immediately upon receiving the response. Terms like Hook API or Interceptor can be used for what is described above. With axios you refer to the following code in conjunction with the nprogress library:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | axios <span class="token punctuation">.</span> interceptors <span class="token punctuation">.</span> request <span class="token punctuation">.</span> <span class="token function">use</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">config</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> NProgress <span class="token punctuation">.</span> <span class="token function">start</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> config <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">error</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> Promise <span class="token punctuation">.</span> <span class="token function">reject</span> <span class="token punctuation">(</span> error <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> axios <span class="token punctuation">.</span> interceptors <span class="token punctuation">.</span> response <span class="token punctuation">.</span> <span class="token function">use</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">response</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> NProgress <span class="token punctuation">.</span> <span class="token function">done</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> response <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">error</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> Promise <span class="token punctuation">.</span> <span class="token function">reject</span> <span class="token punctuation">(</span> error <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Control errors when sending HTTP requests with Axios
Detailed error control is essential, for each specific error we have a separate handle that enhances the user experience with the flexibility of the application:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | axios <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string">'http://v1study.com/user/12345'</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">catch</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">error</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> error <span class="token punctuation">.</span> response <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Lỗi khi server nhận được request và không xử lý được, các lỗi này có mã lỗi trong dải 2xx</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> error <span class="token punctuation">.</span> response <span class="token punctuation">.</span> data <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> error <span class="token punctuation">.</span> response <span class="token punctuation">.</span> status <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> error <span class="token punctuation">.</span> response <span class="token punctuation">.</span> headers <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> error <span class="token punctuation">.</span> request <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Lỗi khi request được tạo ra nhưng server không hồi đáp, khi đó error.request là một thực thể của XMLHttpRequest</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> error <span class="token punctuation">.</span> request <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token comment">// Lỗi khi thiết lập request</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Error'</span> <span class="token punctuation">,</span> error <span class="token punctuation">.</span> message <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> error <span class="token punctuation">.</span> config <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Cancel a request
Cancellation is a necessary function, you imagine the user clicks on the button to submit the order and each order processes within 10 seconds, but right after clicking the request, the user wants to cancel the request to modify the order. This item with the product quantity is more, so cancel the request is very necessary.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <span class="token keyword">var</span> CancelToken <span class="token operator">=</span> axios <span class="token punctuation">.</span> CancelToken <span class="token punctuation">;</span> <span class="token keyword">var</span> source <span class="token operator">=</span> CancelToken <span class="token punctuation">.</span> <span class="token function">source</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> axios <span class="token punctuation">.</span> <span class="token function">post</span> <span class="token punctuation">(</span> <span class="token string">'http://allaravel.com/order'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> data <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token string">'product_id'</span> <span class="token operator">:</span> <span class="token number">234</span> <span class="token punctuation">,</span> <span class="token string">'quantity'</span> <span class="token operator">:</span> <span class="token number">3</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> cancelToken <span class="token operator">:</span> source <span class="token punctuation">.</span> token <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">catch</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">thrown</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> axios <span class="token punctuation">.</span> <span class="token function">isCancel</span> <span class="token punctuation">(</span> thrown <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Hủy bỏ yêu cầu'</span> <span class="token punctuation">,</span> thrown <span class="token punctuation">.</span> message <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token comment">// Quản lý lỗi ở đây</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Người dùng muốn hủy yêu cầu tạo đơn hàng mới</span> source <span class="token punctuation">.</span> <span class="token function">cancel</span> <span class="token punctuation">(</span> <span class="token string">'Hủy yêu cầu tạo đơn hàng mới.'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Why use Axios
Currently there are a lot of Javascript HTTP Clients can be mentioned in addition to Axios such as using jQuery, fetch () method supported from ES6, SuperAgent, Qwest … However, Axios has many advantages as follows:
- Axios builds on the Promise platform so it inherits the advantages of Promise.
- Allows performing hook (intercept) right after sending request and receiving response.
- Allow request cancellation, this is a function that other libraries don’t have.
Through the article, I believe you have answered the question What is Axios ?, Why use Axios ?. Axios is an HTTP Client that makes it easy to build connecting applications from multiple data sources. If so, you will find it similar to GuzzleHttp in PHP. Axios is a tool for easy data retrieval for frameworks such as Vue.js, React.js, Angular… to build flexible and easy font-end applications.