Vue encapsulating axios can improve code quality and make use more convenient. The API of axios is very friendly, and developers can easily use it directly in the project; however, as the project scale increases, every time an HTTP request is initiated, it is necessary to write operations such as setting timeout, setting request headers, error handling, etc. . This kind of duplication of work not only wastes time, but also makes the code redundant and difficult to maintain; in order to improve the quality of our code, we should encapsulate axios twice in the project before using it, which can make it more convenient to use.
The operating environment of this tutorial: windows7 system, vue3 version, DELL G3 computer.
What is axios
axios is a lightweight HTTP client
based on the XMLHttpRequest service to perform HTTP requests. Supports rich configuration, supports Promise, supports browser side and Node.js side. Since Vue2.0, Youda announced that it will cancel the official recommendation of vue-resource and recommend axios instead. Now axios has become the first choice for most Vue developers
##Why encapsulate
The API of axios is very friendly and you can easily use it directly in your project. However, as the scale of the project increases, every time an HTTP request is initiated, it is necessary to perform operations such as setting the timeout, setting the request header, determining which request address to use based on the project environment, error handling, etc. Needing to write it againThis kind of repetitive work not only wastes time, but also makes the code redundant and difficult to maintain. In order to improve the quality of our code, we should encapsulate axios twice in the project and then use For example:axios('http://localhost:3000/data', { // 配置代码 method: 'GET', timeout: 1000, withCredentials: true, headers: { 'Content-Type': 'application/json', Authorization: 'xxx', }, transformRequest: [function (data, headers) { return data; }], // 其他请求配置...}).then((data) => { // todo: 真正业务逻辑代码 console.log(data);}, (err) => { // 错误处理代码 if (err.response.status === 401) { // handle authorization error } if (err.response.status === 403) { // handle server forbidden error } // 其他错误处理..... console.log(err);});If each page sends a similar request, you must write one The configuration and error handling of the heap are too cumbersomeAt this time we need to re-encapsulate axios to make it more convenient to use
How to encapsulate
While encapsulating, you need to negotiate some agreements with the backend, request headers, status codes, request timeouts...Set interface requests Prefix: Depending on the development, testing, and production environments, the prefix needs to be distinguishedRequest header: To implement some specific services, some parameters must be carried before the request can be made (for example: membership service)Status code: According to the different status returned by the interface, different services are executed. This needs to be agreed with the backend. Request method: Re-encapsulate according to get, post and other methods, which is more convenient to use. Request interceptor: Determine which requests can access based on the request header setting Response interceptor: This block determines the execution of different services based on the status code returned by the backend`Set the interface request prefix
Use node environment variables to make judgments to distinguish between development, testing and production environmentsif (process.env.NODE_ENV === 'development') { axios.defaults.baseURL = 'http://dev.xxx.com' } else if (process.env.NODE_ENV === 'production') { axios.defaults.baseURL = 'http://prod.xxx.com' }For local debugging Sometimes, you also need to configure devServer in the vue.config.js file to implement proxy forwarding, so as to achieve cross-domain
devServer: { proxy: { '/proxyApi': { target: 'http://dev.xxx.com', changeOrigin: true, pathRewrite: { '/proxyApi': '' } } } }
Set the request header and timeout period
In most cases Below, the request headers are fixed. Only in a few cases, some special request headers are needed. Here, the universal request headers are used as the basic configuration. When a special request header is required, pass the special request header as a parameter to overwrite the basic configurationconst service = axios.create({ ... timeout: 30000, // 请求 30s 超时 headers: { get: { 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8' // 在开发中,一般还需要单点登录或者其他功能的通用请求头,可以一并配置进来 }, post: { 'Content-Type': 'application/json;charset=utf-8' // 在开发中,一般还需要单点登录或者其他功能的通用请求头,可以一并配置进来 } }, })
Encapsulated request method
First introduce the encapsulated method, and then The called interface is re-encapsulated into a method and exposed// get 请求 export function httpGet({ url, params = {} }) { return new Promise((resolve, reject) => { axios.get(url, { params }).then((res) => { resolve(res.data) }).catch(err => { reject(err) }) }) } // post // post请求 export function httpPost({ url, data = {}, params = {} }) { return new Promise((resolve, reject) => { axios({ url, method: 'post', transformRequest: [function (data) { let ret = '' for (let it in data) { ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&' } return ret }], // 发送的数据 data, // url参数 params }).then(res => { resolve(res.data) }) }) }Put the encapsulated method in an api.js file
import { httpGet, httpPost } from './http' export const getorglist = (params = {}) => httpGet({ url: 'apps/api/org/list', params })You can call it directly in the page
// .vue import { getorglist } from '@/assets/js/api' getorglist({ id: 200 }).then(res => { console.log(res) })This way The api can be managed uniformly. In the future, maintenance and modification only need to be done in the api.js file.
Request interceptor
// 请求拦截器 axios.interceptors.request.use( config => { // 每次发送请求之前判断是否存在token // 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况,此处token一般是用户完成登录后储存到localstorage里的 token && (config.headers.Authorization = token) return config }, error => { return Promise.error(error) })
Response interceptor
The response interceptor can do a layer after receiving the response. Operations, such as determining login status and authorization based on status code// 响应拦截器 axios.interceptors.response.use(response => { // 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据 // 否则的话抛出错误 if (response.status === 200) { if (response.data.code === 511) { // 未授权调取授权接口 } else if (response.data.code === 510) { // 未登录跳转登录页 } else { return Promise.resolve(response) } } else { return Promise.reject(response) } }, error => { // 我们可以在这里对异常状态作统一处理 if (error.response.status) { // 处理请求失败的情况 // 对不同返回码对相应处理 return Promise.reject(error.response) } })
Summary
Encapsulation is a very meaningful method in programming. Simple axios encapsulation can allow us to You can appreciate its charmThere is no absolute standard for packaging axios. As long as your packaging can meet the needs of your project and is easy to use, it is a good packaging solution[ Related recommendations:vuejs video tutorial, web front-end development】
The above is the detailed content of What is the use of vue encapsulating axios?. For more information, please follow other related articles on the PHP Chinese website!

To integrate React into HTML, follow these steps: 1. Introduce React and ReactDOM in HTML files. 2. Define a React component. 3. Render the component into HTML elements using ReactDOM. Through these steps, static HTML pages can be transformed into dynamic, interactive experiences.

React’s popularity includes its performance optimization, component reuse and a rich ecosystem. 1. Performance optimization achieves efficient updates through virtual DOM and diffing mechanisms. 2. Component Reuse Reduces duplicate code by reusable components. 3. Rich ecosystem and one-way data flow enhance the development experience.

React is the tool of choice for building dynamic and interactive user interfaces. 1) Componentization and JSX make UI splitting and reusing simple. 2) State management is implemented through the useState hook to trigger UI updates. 3) The event processing mechanism responds to user interaction and improves user experience.

React is a front-end framework for building user interfaces; a back-end framework is used to build server-side applications. React provides componentized and efficient UI updates, and the backend framework provides a complete backend service solution. When choosing a technology stack, project requirements, team skills, and scalability should be considered.

The relationship between HTML and React is the core of front-end development, and they jointly build the user interface of modern web applications. 1) HTML defines the content structure and semantics, and React builds a dynamic interface through componentization. 2) React components use JSX syntax to embed HTML to achieve intelligent rendering. 3) Component life cycle manages HTML rendering and updates dynamically according to state and attributes. 4) Use components to optimize HTML structure and improve maintainability. 5) Performance optimization includes avoiding unnecessary rendering, using key attributes, and keeping the component single responsibility.

React is the preferred tool for building interactive front-end experiences. 1) React simplifies UI development through componentization and virtual DOM. 2) Components are divided into function components and class components. Function components are simpler and class components provide more life cycle methods. 3) The working principle of React relies on virtual DOM and reconciliation algorithm to improve performance. 4) State management uses useState or this.state, and life cycle methods such as componentDidMount are used for specific logic. 5) Basic usage includes creating components and managing state, and advanced usage involves custom hooks and performance optimization. 6) Common errors include improper status updates and performance issues, debugging skills include using ReactDevTools and Excellent

React is a JavaScript library for building user interfaces, with its core components and state management. 1) Simplify UI development through componentization and state management. 2) The working principle includes reconciliation and rendering, and optimization can be implemented through React.memo and useMemo. 3) The basic usage is to create and render components, and the advanced usage includes using Hooks and ContextAPI. 4) Common errors such as improper status update, you can use ReactDevTools to debug. 5) Performance optimization includes using React.memo, virtualization lists and CodeSplitting, and keeping code readable and maintainable is best practice.

React combines JSX and HTML to improve user experience. 1) JSX embeds HTML to make development more intuitive. 2) The virtual DOM mechanism optimizes performance and reduces DOM operations. 3) Component-based management UI to improve maintainability. 4) State management and event processing enhance interactivity.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Chinese version
Chinese version, very easy to use

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

Zend Studio 13.0.1
Powerful PHP integrated development environment

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

Atom editor mac version download
The most popular open source editor