赞
踩
vue项目中用的是aixos来进行请求,但是项目中接口请求比较多,而且vue3.0也不像vue2.x一样在入口文件引入后直接挂载到全局,比如这样:
- import axios from 'axios'
- Vue.prototype.$axios = axios // 这是挂载到全局,$axios 是自己命名,按照自己的习惯来
- // 使用就可以直接在需要用的页面直接调用
- this.$axios.post('xxxx').then((res) => {
- console.log(res)
- })
这是vue2.x的挂载全局的写法,很方便。但是vue3.0中不支持直接挂载到全局,且vue3.0中更习惯在哪里使用在哪里引入,比如这样:
- <script>
- import axios from "axios"
- export default {
- setup() {
- axios.get('xxx').then((res)=>{
- console.log(res);
- })
- },
- };
- </script>
这样虽然方便一些,但是随着代码越来越多,接口也越来越多,使用起来还是很不方便的,而且也不方便管理,这时候就需要我们根据个人需求进行二次封装
1.首先可以在src目录下创建一个文件夹,用于放置文件
我个人习惯是先建一个用于放基准地址的文件夹,比如这样:
- export default {
- local: {
- baseURL: 'https://2315312.com'
- },
- test: {
- baseURL: 'https://test.com'
- },
- prod: {
- baseURL: 'xxx'
- },
- http: {
- baseURL: 'xxxxx'
- }
- }
因为在公司中有很多环境,比如开发环境,测试环境等等,基准地址都不一样,所以我个人习惯是专门有一个文件是 放基准地址的,这样便于管理
2.第二步就是对axios进行二次封装了
- // 首先先引入aixos
- import axios from 'axios'
- // element引入文件
- import { ElMessage } from 'element-plus'
- // 这是我放基准地址的文件
- import env from './env'
- // 创建一个axios 实例
- const api = axios.create({
- baseURL: env.http.baseURL, // 基准地址
- timeout: 5000 // 超时时间
- })
- // 请求拦截
- api.interceptors.request.use((config) => {
- return config // 请求拦截里面的需求可以自己写,有的项目需要配置很多,有的很少,这里就
- // 不放了
- }, error => {
- Promise.reject(error)
- })
- // 响应拦截
- /**
- 响应拦截也是一样,最基本的可以把返回出来的一些数据做简单处理,
- 比如把请求回来的提示信息解构出来,给予提示,这样就不用在每次请求完成后单独去写
- 这里用的是element-ui 里面的提示
- **/
- api.interceptors.response.use((res) => {
- const { data: result, meta: { msg, status } } = res.data
-
- ElMessage({
- message: msg,
- type: 'success',
- }
- return result
- }, error => {
- Promise.reject(error)
- })
- // 最后导出
- export default api

这就是axios最简单的一个封装了,而且我习惯于把请求也单独写一个文件
- // 这里是封装好的aioxs
- import api from './api'
- // 登录
- export const login = (data) => {
- return api({
- url: 'login',
- method: 'POST',
- data
- })
- }
这样使用时候就非常方便了,而且这只是最基本的封装,如果想要实现更多需求,就要你自己根据需求去封装了
像引入的比如env,api等等这些文件就是我自己创建的文件,文件名随你们喜好命名,不必要跟我一样。
最后,如果有哪里错误的地方,欢迎大佬指正,拜谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。