vue如何封装axios?

这篇博客介绍了如何利用npm安装axios并进行服务端配置,包括设置基础URL、超时时间,以及添加请求和响应拦截器来处理加载提示和错误。在service.js中,创建了一个axios实例并导出,方便在其他模块中调用。同时,创建了api.js用于定义具体的接口请求,如获取验证码和登录功能。最后展示了在实际应用中如何导入并使用这些封装好的请求。

1、首先在小黑框下载 npm i axios --save下载依赖,然后创建src/http/service.js

2、在service.js文件中存放的时axios的配置以及拦截器等,最后导出一个axios象

import  axios  from  'axios'
import  {  Toast  }  from  'vant'
import  { baseUrl }  from  '@/config'

const  service  =  axios.create({  
    baseURL:  baseUrl,
      // url = base api url + request url
    //   withCredentials: true, // send cookies when cross-domain requests
      timeout:  5000  // request timeout
})
let  loading
    //请求拦截器
service.interceptors.request.use(config => {   
        loading  =  Toast.loading({     message:   '加载中...',     forbidClick:  true,    });  
        config.headers['Authorization']  =  sessionStorage.getItem('token')  
        return   config
    }, error  =>  {       // do something with request error
              
        console.log(error)  // for debug
                   return  Promise.reject(error)    
    })
    //响应拦截器
service.interceptors.response.use(res => {   //关闭loading
           
        loading.clear()   
        return  Promise.resolve(res)
    }, error => {   
        loading.clear()   
        console.log('err' +  error)   
        return  Promise.reject(error)
    })
    // module.export= service;
export  default  service

3、这里我再创建一个api.js,这里面放的是请求接口.传递的参数.请求方式,并且引入封装好的axios对象。

import  service  from  './service'
import  require  from  './require'

//定义请求方法,然后导出
//获取验证码
export  function  smsCode(arg) {    
    return  service({         url: require.smsCode,         data: arg,         method: 'post'     })
}
export  function  login() {    
    return  service({         url: require.login,         data: {},         method: 'post'     })
}

 4、这里我再创建一个request.js,这里面放的是具体请求。

 

 5、使用

使用前先导入然后获取数据

### 封装 Axios 的核心目标 在 Vue 项目中封装 Axios 的主要目的是提高代码的可维护性和复用性。通过统一配置、拦截器、错误处理和请求方法的封装,可以实现接口调用的标准化,减少重复逻辑,提升开发效率。 ### 创建 Axios 实例并统一配置 在封装过程中,首先应创建一个 Axios 实例,并设置基础 URL、超时时间、默认请求头等通用配置。这样可以避免在每次请求中重复设置相同参数。例如: ```javascript // src/utils/request.js import axios from 'axios'; const service = axios.create({ baseURL: process.env.VUE_APP_API_BASE_URL || '/api', // 动态配置基础 URL timeout: 5000, // 请求超时时间 headers: { 'Content-Type': 'application/json' }, // 默认请求头 }); ``` 该配置方式适用于不同环境下的请求管理,提升项目的灵活性和可维护性[^1]。 ### 使用拦截器统一处理请求与响应 Axios 提供了请求和响应拦截器,可以在请求发送前或响应返回后执行统一逻辑。例如,在请求拦截器中添加 token,或在响应拦截器中统一处理错误信息: ```javascript // 请求拦截器:添加 token service.interceptors.request.use( config => { const token = localStorage.getItem('token'); if (token) { config.headers['Authorization'] = `Bearer ${token}`; } return config; }, error => Promise.reject(error) ); // 响应拦截器:统一处理错误状态码 service.interceptors.response.use( response => response.data, error => { if (error.response && error.response.status === 401) { // 处理未授权逻辑,例如跳转至登录页 } return Promise.reject(error); } ); ``` 这种方式能够减少重复的错误处理代码,并增强请求流程的可控性[^3]。 ### 封装常用 HTTP 方法并统一调用方式 为了进一步简化接口调用,可以封装常用的 HTTP 方法(如 GET、POST、PUT、DELETE),并统一调用格式。例如: ```javascript // src/utils/request.js const request = { get: (url, params) => service.get(url, { params }), post: (url, data) => service.post(url, data), put: (url, data) => service.put(url, data), delete: (url, params) => service.delete(url, { params }), }; export default request; ``` 通过该封装方式,开发者可以使用简洁的接口形式发起请求,同时保持统一的错误处理机制。 ### 提供灵活的扩展能力 封装 Axios 时应考虑其可扩展性。例如,允许用户自定义拦截器或动态修改配置,以适应不同业务场景: ```javascript // 允许外部添加自定义请求拦截器 request.addRequestInterceptor = (onFulfilled, onRejected) => { service.interceptors.request.use(onFulfilled, onRejected); }; // 允许外部添加自定义响应拦截器 request.addResponseInterceptor = (onFulfilled, onRejected) => { service.interceptors.response.use(onFulfilled, onRejected); }; ``` 这种设计增强了封装模块的灵活性,使得不同项目或模块可以根据自身需求定制请求行为。 ### 示例:在 Vue 组件中使用封装后的 Axios 在组件中调用封装后的 Axios 接口时,代码简洁且统一: ```javascript import request from '@/utils/request'; export default { methods: { async fetchData() { try { const data = await request.get('/users', { page: 1 }); console.log(data); } catch (error) { console.error('请求失败:', error); } }, }, }; ``` 该方式使得接口调用逻辑清晰,便于调试和维护。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值