Vue 项目中关于网络请求的封装,分为两个部分:
- axios 的公共配置
- api 请求的封装
一、axios 的公共配置
axios 的公共配置,指的是针对整个项目中所有的 axios 请求的一些公共处理。1、创建配置文件
通常我们会在项目的uitls目录中,创建一个request.js文件,用来处理所有关于 axios 的公共配置。
在该文件中引入 axios:import axios from 'axios';
2、配置公共路径
该配置生效后,后续所有的 axios 的 url,就不需要再设置公共路径了。// 公共路径axios.defaults.baseURL = 'http://47.98.128.191:3000';
3、处理后端返回的数据格式
由于 axios 接收到的后端数据,是整个响应对象。我们真正需要的数据,在响应对象的 data 属性上,因此,我们可以在“响应拦截器”中处理后端返回的数据格式:
这样处理后,后续调用 axios 接收后端返回的数据时,就可以直接接收到后端给的结果。// 响应拦截器axios.interceptors.response.use(res => {// 处理后端返回的数据格式,将 res.data 返回给组件return res.data;})
4、运行公共配置文件
想要让以上配置生效,需要在main.js中引入:import './utils/request.js';
二、api 请求的封装
在任何项目中,都会将项目中所有的网络请求,统一放到同一个目录中来进行管理。1、创建目录
在src目录中,创建api目录用来存放项目中所有的请求文件。同时,在api目录中再创建一个modules目录,用来管理每一个数据模块的相关请求文件。src|--- api| |--- modules
2、创建模块文件
根据项目中的数据类型,在modules创建不同的.js文件。例如学生的请求、班级的请求:src|--- api| |--- modules| | |--- students.js| | |--- classes.js| | |--- ...
3、创建汇总文件
我们还需要将所有请求模块文件,再做一个汇总。
在api目录中,创建一个index.js:src|--- api| |--- index.js| |--- modules| | |--- students.js| | |--- classes.js| | |--- ...
4、封装请求模块
我们以学生模块为例:import axios from 'axios';const students = {get(params) {return axios({url: '/students/getStudents',params})},delete() {},update() {},add(data) {return axios({url: '/students/addStudents',method: 'POST',data})},// ...}export default students;
5、汇总请求
import students from './modules/students.js';import classes from './modules/classes.js'const api = {students, classes}export default api;
6、全局挂载 api
在main.js中引入api/index.js文件,将 api 对象挂载到 Vue 实例上:
将 api 对象挂载到 Vue 实例身上,后续在所有组件中都可以通过import api from './api/index.js'Vue.prototype.$api = api;
this.$api获取到 api 对象。7、组件调用 api
以获取学生数据为例:export default {data() {return {studentsData: []}},created() {this.getStudents();},methods: {async getStudents() {const res = await this.$api.students.get();this.studentsData = res.data.rows;}}}
