Vue的axios封装

1.引入

npm i axios

1)在src目录中创建一个request文件夹,创建request.js文件封装axios的全局变量、拦截器等;创建api.js管理具体接口

在request.js文件中
import axios from ‘axios’
import QS from ‘qs’ //引入qs模块,用来序列化post类型的数据
import {Toast} from ‘vant’ //引入vant组件的toast提示框组件

2)环境的切换,切换开发环境、测试环境和生产环境,使用axios.defaults.baseURL可以设置axios的默认请求地址
// 环境的切换if (process.env.NODE_ENV == 'development') {axios.defaults.baseURL = 'https://www.baidu.com';}else if (process.env.NODE_ENV == 'debug') {axios.defaults.baseURL = 'https://www.ceshi.com';}else if (process.env.NODE_ENV == 'production') {axios.defaults.baseURL = 'https://www.production.com';}
3)通过axios.defaults.timeout设置默认的请求超时时间

axios.defaults.timeout = 10000;

4)请求拦截

// 添加请求拦截器
axios.interceptors.request.use( config =>{
    //每次发送请求前判断token,存在就在header加上token,果然过期所以在响应拦截器中要对返回状态进行判断
    const token = localStorage.token; 
    token && (config.headers.Authorization = token);
    return config;
  }, error =>{
    // 对请求错误做些什么
    return Promise.reject(error);
  });

5)响应的拦截,服务器返回给我们的数据,我们在拿到之前可以对他进行一些处理

// 响应拦截器
axios.interceptors.response.use( 
 response => { 
 // 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据 
 // 否则的话抛出错误
 if (response.status === 200) {  
  return Promise.resolve(response); 
 } else {  
  return Promise.reject(response); 
 } 
 }, 
 // 服务器状态码不是2开头的的情况
 // 这里可以跟你们的后台开发人员协商好统一的错误状态码 
 // 然后根据返回的状态码进行一些操作,例如登录过期提示,错误提示等等
 // 下面列举几个常见的操作,其他需求可自行扩展
 error => {  
 if (error.response.status) {  
  switch (error.response.status) {  
  // 401: 未登录
  // 未登录则跳转登录页面,并携带当前页面的路径
  // 在登录成功后返回当前页面,这一步需要在登录页操作。  
  case 401:   
   router.replace({   
   path: '/login',   
   query: { 
    redirect: router.currentRoute.fullPath 
   }
   });
   break;

  // 403 token过期
  // 登录过期对用户进行提示
  // 清除本地token和清空vuex中token对象
  // 跳转登录页面  
  case 403:
   Toast({
   message: '登录过期,请重新登录',
   duration: 1000,
   forbidClick: true
   });
   // 清除token
   localStorage.removeItem('token');
   store.commit('loginSuccess', null);
   // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面 
   setTimeout(() => {   
   router.replace({    
    path: '/login',    
    query: { 
    redirect: router.currentRoute.fullPath 
    }   
   });   
   }, 1000);   
   break;

  // 404请求不存在
  case 404:
   Toast({
   message: '网络请求不存在',
   duration: 1500,
   forbidClick: true
   });
   break;
  // 其他错误,直接抛出错误提示
  default:
   Toast({
   message: error.response.data.message,
   duration: 1500,
   forbidClick: true
   });
  }
  return Promise.reject(error.response);
 }
 } 
});

6)封装get方法和post方法

封装get方法

export function 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方法必须要使用对提交从参数对象进行序列化的操作,所以这里我们通过node的qs模块来序列化我们的参数,所有使用import QS from ‘qs’

/** 
 * post方法,对应post请求 
 * @param {String} url [请求的url地址] 
 * @param {Object} params [请求时携带的参数] 
 */
export function post(url, params) {
	 return new Promise((resolve, reject) => {
		 axios.post(url, QS.stringify(params))
		 .then(res => {
			  resolve(res.data);
		 })
		 .catch(err =>{
		  	reject(err.data)
		 })
	 });
}

2.在api.js文件中管理接口

2-1)在api.js中引入我们封装的get和post方法

import { get, post } from ‘./http’

2-2)封装接口

export const apiAddress = params => post(‘地址’, params);

2-3)调用接口

import { apiAddress } from '@/request/api';// 导入我们的api接口

 // 调用api接口,并且提供了两个参数    
   apiAddress({     
    type: 0,     
    sort: 1    
   }).then( res=>{
		console.log(res)	
	})

站外资料:https://www.jb51.net/article/145341.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue使用axios进行网络请求的封装可以提高代码的复用性和维护性,以下是一个简单的示例: 首先,安装axiosvue-axios库: ```bash npm install axios vue-axios ``` 接下来,在main.js引入并注册这两个库: ```javascript import axios from 'axios'; import VueAxios from 'vue-axios'; Vue.use(VueAxios, axios); ``` 然后,创建一个api.js文件用于封装axios的请求方法: ```javascript import axios from 'axios'; const api = axios.create({ baseURL: 'http://api.example.com', // 设置请求的基础URL timeout: 5000, // 设置请求超时时间 }); // 请求拦截器 api.interceptors.request.use( config => { // 可以在请求发送之前做一些处理,例如添加请求头等 return config; }, error => { // 请求错误处理 return Promise.reject(error); } ); // 响应拦截器 api.interceptors.response.use( response => { // 可以在接收到响应数据后做一些处理,例如统一处理错误码等 return response.data; }, error => { // 响应错误处理 return Promise.reject(error); } ); export default { // 封装GET请求 get(url, params) { return api.get(url, { params }); }, // 封装POST请求 post(url, data) { return api.post(url, data); }, // 封装PUT请求 put(url, data) { return api.put(url, data); }, // 封装DELETE请求 delete(url) { return api.delete(url); }, }; ``` 现在,你可以在Vue组件使用封装好的api.js文件进行网络请求了: ```javascript import api from './api.js'; export default { mounted() { this.getData(); }, methods: { async getData() { try { const res = await api.get('/data'); console.log(res); } catch (error) { console.error(error); } }, }, }; ``` 以上就是一个简单的Vue axios封装示例,你可以根据实际需求对其进行扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值