axios封装

本文档详细介绍了如何在Vue项目中初始化axios,包括使用脚手架创建项目,封装axios以设置基础URL、超时时间、请求头等,并实现请求和响应拦截器。同时,创建了http目录存放网络请求文件,apis.js文件用于定义接口。最后在Login.vue组件中导入并测试axios发送登录请求,实现了与后端Django的交互。

1.初始化VUE项目

#使用脚手架创建项目  
vue init webpack deaxios   
#进入项目
cd deaxios
#安装axios
cnpm install axios -S

在这里插入图片描述

2.封装axios

2.1 src 文件夹下新建http 文件夹,用来放网络请求相关的文件

2.2 src/http 文件夹下,创建 index.js 文件,对axios 进行封装

/* eslint-disable */
const { data } = require('autoprefixer');
const axios = require('axios');
const { error } = require('shelljs');

axios.defaults.baseURL = 'http://192.168.56.100:8888' //vue请求后端地址

axios.defaults.timeout = 10000; // 超时设置

axios.defaults.withCredentials = true; // 跨域访问需要发送cookie时,一定要加上


axios.defaults.headers['Content-Type'] = 'application/json'; //设置默认提交json
axios.defaults.transformRequest = data => JSON.stringify(data);//把数据对象序列化成json字符串


// 对请求拦截器,和响应拦截器进行封装

/*
请求拦截器,发送请求前需要调用这个函数
当没有登录时,直接跳转到登录页
请求发送前把token获取,设置到header中
*/

axios.interceptors.request.use(config=>{
    //从localStorage中获取token
    let token = localStorage.getItem('token');
    // 如果有token,就把token设置到请求头中Authorization字段中
    token && (config.headers.Authorzation = token);
    return config;
},error => {
    return Promise.reject(error)
});

/*
响应拦截器,当后端返回数据给vue时,会调用这个函数

每次返回403错误时,跳转到login
*/
axios.interceptors.response.use(response =>{
    //当响应码是2xx的情况时,进入这里
    return response.data;
},error =>{
    //当响应码不是2xx的情况是,进入这里
    return error
});

//使用上面的axios对象,对get和post请求进行封装

/*
get方法,对应get请求
@param {String} url [请求的url地址]
@param {Object} params [请求时携带的参数]
*/

export function get(url,params,headers){
    return new Promise((resolve,reject) =>{
        axios.get(url,{params,headers}).then(res=>{
            resolve(res.data.ResulObj)
        }).catch(err =>{
            reject(err.data)
        })
    })
}

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

//一定要导出函数
export default axios;

2.3 ser/http 目录下创建 apis.js文件,用来写接口地址列表

/* eslint-disable */
//接口信息,生成请求方法
//引入 GET方法 ,POST方法
import {get,post} from './index'

//用户登录

export  const  login = (params,headers)=>post('/user/login/',params,headers)

3.创建一个Login.vue页面

3.1写页面 components/Login.vue

<template> 
	<div> 测试axios-{{title}} </div> 
</template>


<script> 
	import { login } from '@/http/apis'; 
	export default { 
        data() { 
            return { 
                title: '测试axios', 
            } 
        },
        mounted() { 
        },
        methods: { 
            
        } 
    } 
</script> 
<style scoped> 
    
</style>

3.2 src/router/index.js 中配置vue路由

import Login from '@/components/Login'
export default new Router({
routes: [ 
	{ path: '/login', name: 'Login', component: Login }, 
	] 
})

4在Login.vue页面中使用axios发送请求

4.1src\http\apis.js 中配置后端接口调用请求

/* eslint-disable */ 
// 接口信息, 生成请求方法 
// 引入 get方法, post方法 
import { get, post } from './index' 

// 用户登录 
export const login = (params, headers) => post("/user/login/",params
, headers)

4.2在 Login.vue 页面中导入模块并测试与django联通

<template> 
	<div> 
		测试axios-{{title}} 
		<button @click="requetLogin">登录</button> 
	</div> 
</template> 
<script> 
	import { login } from '@/http/apis'; 
	// @符号指的是src路径 
	export default { 
		// vue页面中双向绑定数据 
		data() { 
			return { 
				title: '测试axios', 
			} 
		},
			// vue生命周期中挂在的函数 
		mounted() { 
			
		},
		methods: { 
			requetLogin() { 
				// 获取小节的内容 
				let data = { name: 'zhangsan', pwd: '123456' } 
				login(data).then((resp) => { 
					// resp: django后端返回的数据 
					console.log(resp); 
				}).catch((err) => { 
					console.log(err); 
				});
			}, 
		} 
	} 
</script> 

<style scoped> 

</style>

点击登录按钮,出发请求,成功登录,并返回django后端信息

在这里插入图片描述

### 如何封装 Axios 以简化 HTTP 请求并增强功能 #### 封装的意义 通过封装 Axios,开发者能够在 Vue 或其他前端框架中统一处理 HTTP 请求,从而提升代码的可维护性和可扩展性。这种封装方式允许配置统一的请求头、拦截器以及错误处理逻辑,减少冗余代码的同时也提高了开发效率[^1]。 --- #### 封装的具体实现步骤 ##### 1. 安装 Axios 在项目中引入 Axios 是第一步操作。可以通过 npm 或 yarn 进行安装: ```bash npm install axios ``` 或者使用 Yarn: ```bash yarn add axios ``` --- ##### 2. 创建 Axios 实例 为了便于管理和定制化需求,通常会创建一个独立的 Axios 实例,并在此基础上进行进一步封装。 ```javascript // src/utils/request.js import axios from 'axios'; const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // 设置基础 URL 地址 timeout: 5000, // 超时时间 (毫秒) headers: { // 默认请求头 'Content-Type': 'application/json', }, }); export default service; ``` 此部分实现了基本的 Axios 配置,包括 `baseURL` 和超时设置等参数[^3]。 --- ##### 3. 添加请求拦截器 请求拦截器用于在发送请求前对数据或配置进行预处理,例如添加 Token 认证信息或其他公共字段。 ```javascript service.interceptors.request.use( config => { const token = localStorage.getItem('token'); // 假设 Token 存储于本地存储 if (token) { config.headers['Authorization'] = `Bearer ${token}`; // 自动携带认证信息 } return config; }, error => { console.error(error); // 打印错误日志 Promise.reject(error); } ); ``` 这段代码展示了如何动态注入 Token 到请求头部,同时提供了错误捕获机制。 --- ##### 4. 添加响应拦截器 响应拦截器负责对接收到的数据进行初步解析和异常处理,确保返回给业务层的是干净的结果。 ```javascript service.interceptors.response.use( response => { const res = response.data; if (res.code && res.code !== 200) { // 如果服务端返回的状态码不正常,则抛出错误 Message.error(res.message || 'Error'); return Promise.reject(new Error(res.message || 'Request failed')); } else { return res; // 返回成功后的数据体 } }, error => { if (error.response) { switch (error.response.status) { case 401: MessageBox.confirm('登录状态已过期,请重新登录', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' }).then(() => { window.location.href = '/login'; // 跳转到登录页 }); break; case 403: Message.error('权限不足'); break; case 404: Message.error('资源未找到'); break; default: Message.error(`服务器内部错误(${error.response.status})`); } } else { Message.error('网络连接失败'); } return Promise.reject(error); } ); ``` 这里不仅完成了常规的成功/失败判断,还针对不同类型的 HTTP 错误进行了个性化提示。 --- ##### 5. 封装通用请求方法 为了让调用更加直观简单,可以提供一些便捷的方法来发起 GET、POST 等常见请求类型。 ```javascript export function get(url, params = {}) { return service.get(url, { params }); } export function post(url, data = {}, options = {}) { return service.post(url, data, options); } ``` 这些函数隐藏了底层细节,使得组件中的实际调用变得非常简洁明了[^2]。 --- ##### 6. 使用封装好的 Axios 实例 最后,在任何需要的地方都可以轻松导入并利用这个经过优化过的工具库完成各种 API 的交互工作。 ```javascript import { get, post } from '@/utils/request'; get('/api/user/info').then(response => { console.log('User Info:', response); }); post('/api/login', { username: 'admin', password: 'password' }) .then(response => { console.log('Login Success:', response); }) .catch(err => { console.error('Login Failed:', err); }); ``` 以上例子说明了如何快速集成封装Axios 来执行具体的接口访问任务。 --- #### 总结 通过对 Axios 的全面封装,不仅可以显著降低重复劳动量,还能有效改善项目的整体架构质量。无论是简单的 CRUD 操作还是复杂的跨域通信场景,都能从中受益匪浅[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值