


What is the method of encapsulating Axios requests in vue3 and using it in components?
1. Create a folder to store the encapsulated js
I created it in src/request/axios.js
What you need to configure yourself is: your own request address, whether the tokenKey is token, and change it to save it locally. Token name, can look at the comments in the code, it is easy to understand.
/**axios封装 * 请求拦截、相应拦截、错误统一处理 */ import axios from 'axios'; import QS from 'qs'; import router from '../router/index' //qs.stringify()是将对象 序列化成URL的形式,以&进行拼接 // let protocol = window.location.protocol; //协议 // let host = window.location.host; //主机 // axios.defaults.baseURL = protocol + "//" + host; axios.defaults.baseURL = 'http://localhost:8888' axios.interceptors.request.use( //响应拦截 async config => { // 每次发送请求之前判断vuex中是否存在token // 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况 // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断 config.headers.token = sessionStorage.getItem('token') return config; }, error => { return Promise.error(error); }) // 响应拦截器 axios.interceptors.response.use( response => { if (response.status === 200) { return Promise.resolve(response); //进行中 } else { return Promise.reject(response); //失败 } }, // 服务器状态码不是200的情况 error => { if (error.response.status) { switch (error.response.status) { // 401: 未登录 // 未登录则跳转登录页面,并携带当前页面的路径 // 在登录成功后返回当前页面,这一步需要在登录页操作。 case 401: break // 403 token过期 // 登录过期对用户进行提示 // 清除本地token和清空vuex中token对象 // 跳转登录页面 case 403: sessionStorage.clear() router.push('/login') break // 404请求不存在 case 404: break; // 其他错误,直接抛出错误提示 default: } return Promise.reject(error.response); } } ); /** * get方法,对应get请求 * @param {String} url [请求的url地址] * @param {Object} params [请求时携带的参数] */ const $get = (url, params) => { return new Promise((resolve, reject) => { axios.get(url, { params: params, }) .then(res => { resolve(res.data); }) .catch(err => { reject(err.data) }) }); } /** * post方法,对应post请求 * @param {String} url [请求的url地址] * @param {Object} params [请求时携带的参数] */ const $post = (url, params) => { return new Promise((resolve, reject) => { axios.post(url, QS.stringify(params)) //是将对象 序列化成URL的形式,以&进行拼接 .then(res => { resolve(res.data); }) .catch(err => { reject(err.data) }) }); } //下面是vue3必须加的,vue2不需要,只需要暴露出去get,post方法就可以 export default { install: (app) => { app.config.globalProperties['$get'] = $get; app.config.globalProperties['$post'] = $post; app.config.globalProperties['$axios'] = axios; } }3. ConfigurationIn main.js, introduce the js we encapsulated in the first step, and then use()
//引入封装Axios请求 import Axios from './request/axios'; const app = createApp(App).use(VueAxios, axios).use(ElementPlus).use(router).use(Axios)4. Use it in the required components Here comes the point, the packaging is finished, in the final analysis I have to use it. Import
getCurrentInstance in the component. Add the following code.
import { getCurrentInstance } from "vue"; const { proxy } = getCurrentInstance();
function logout(){ proxy.$post("/sysStaff/logout",{}).then((response)=>{ console.log(response) if(response.code == 200){ sessionStorage.clear(); router.push('/') ElMessage({ message: '退出成功', type: 'success', }) } }) }When calling, there are two parameters. The first parameter is the path, and the second parameter is an object, in which the parameters to be sent can be written, such as: username: shuaibi, password :123456. Supplement: Solve the cross-domain problem CORS through specific configurationInstall the third-party package webpack-dev-serverIf you do not install it, there is no devServer configuration item, you must install it
npm install webpack-dev-serverWrite the following configuration in the root directory vue.config.js
module.exports = { // 关闭语法检查 lintOnSave: false, // 解决axios发送请求时的跨域问题,不做配置会报错如下↓↓↓↓ // ccess to XMLHttpRequest at 'http://127.0.0.1:23456/webPage/home_notice.post' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. devServer: { // https: false, proxy: { // /api 表示拦截以/api开头的请求路径 "/webPage": { target: "http://127.0.0.1:23456/", // 跨域的域名(不需要重写路径) ws: false, // 是否开启websockede changeOrigin: true, // 是否开启跨域 // pathRewrite: { // "^/webPage": "", // }, }, }, }, };If the browser requests a web page of one domain name, but needs to obtain the resources of another domain name, as long as these two domain names, ports or protocols If any one of them is different, it is considered to be cross-domain. There is no detailed explanation here. If you want to know more, you can check the information.
- The devServer configuration item can enable a reverse proxy to solve cross-domain problems. All previous address splicing can be obtained
/webPage/cooperater.post... When the request is finally initiated, if pathRewrite is not written, it means searching for /webPage and splicing the address in the target before it. Most will initiate a request to http://127.0.0.1:23456/webPage/cooperater.post.
##pathRewrite: {"^/webPage": "***",}, indicating that route rewriting will replace /webPage with ***
The above is the detailed content of What is the method of encapsulating Axios requests in vue3 and using it in components?. For more information, please follow other related articles on the PHP Chinese website!

Vue.js is easier to use and has a smooth learning curve, which is suitable for beginners; React has a steeper learning curve, but has strong flexibility, which is suitable for experienced developers. 1.Vue.js is easy to get started with through simple data binding and progressive design. 2.React requires understanding of virtual DOM and JSX, but provides higher flexibility and performance advantages.

Vue.js is suitable for fast development and small projects, while React is more suitable for large and complex projects. 1.Vue.js is simple and easy to learn, suitable for rapid development and small projects. 2.React is powerful and suitable for large and complex projects. 3. The progressive features of Vue.js are suitable for gradually introducing functions. 4. React's componentized and virtual DOM performs well when dealing with complex UI and data-intensive applications.

Vue.js and React each have their own advantages and disadvantages. When choosing, you need to comprehensively consider team skills, project size and performance requirements. 1) Vue.js is suitable for fast development and small projects, with a low learning curve, but deep nested objects can cause performance problems. 2) React is suitable for large and complex applications, with a rich ecosystem, but frequent updates may lead to performance bottlenecks.

Vue.js is suitable for small to medium-sized projects, while React is suitable for large projects and complex application scenarios. 1) Vue.js is easy to use and is suitable for rapid prototyping and small applications. 2) React has more advantages in handling complex state management and performance optimization, and is suitable for large projects.

Vue.js and React each have their own advantages: Vue.js is suitable for small applications and rapid development, while React is suitable for large applications and complex state management. 1.Vue.js realizes automatic update through a responsive system, suitable for small applications. 2.React uses virtual DOM and diff algorithms, which are suitable for large and complex applications. When selecting a framework, you need to consider project requirements and team technology stack.

Vue.js and React each have their own advantages, and the choice should be based on project requirements and team technology stack. 1. Vue.js is community-friendly, providing rich learning resources, and the ecosystem includes official tools such as VueRouter, which are supported by the official team and the community. 2. The React community is biased towards enterprise applications, with a strong ecosystem, and supports provided by Facebook and its community, and has frequent updates.

Netflix uses React to enhance user experience. 1) React's componentized features help Netflix split complex UI into manageable modules. 2) Virtual DOM optimizes UI updates and improves performance. 3) Combining Redux and GraphQL, Netflix efficiently manages application status and data flow.

Vue.js is a front-end framework, and the back-end framework is used to handle server-side logic. 1) Vue.js focuses on building user interfaces and simplifies development through componentized and responsive data binding. 2) Back-end frameworks such as Express and Django handle HTTP requests, database operations and business logic, and run on the server.


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

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Zend Studio 13.0.1
Powerful PHP integrated development environment

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SublimeText3 Chinese version
Chinese version, very easy to use

SublimeText3 Linux new version
SublimeText3 Linux latest version

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.
