vue项目接口管理
前言
- 在前后端分离的项目中,都会涉及到很多接口的处理,这时候就需要定义规范统一的接口。
- 统一管理接口可以做到API的复用。
引入axios
在src目录下新建 apis 的文件夹,后台定义的所有接口都在这里定义
1
2cd src
mkdir apis在 apis下新建config.js文件 ,引入axios做响应的配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31import axios from "axios";
// 创建一个axios实例
const service = axios.create({
// baseURL: xxx
// 请求超时时间
timeout: 3000,
});
// 添加请求拦截器
service.interceptors.request.use(
(config) => {
return config;
},
(err) => {
console.log(err);
},
);
//响应拦截
service.interceptors.response.use(
(response) => {
let res = {};
res.status = response.status;
res.data = response.data;
return res;
},
(err) => console.log(err),
);
export default service;main.js中引入axios
1
2import http from "@/api/config"; //axios
Vue.prototype.$http = http;使用:
this.$http.
1
2
3
4
5
6
7
8methods: {
getTableData() {
this.$http.get('/home/getData').then(res => {
res = res.data;
this.tableData = res.data.tableData;
});
}
},
API模块方式
上面的方式是通过axios调用API, API的接口信息写在了方法中,我们可以按模块抽取。
首先取消main.js中对axios的引入
1
2// import http from '@/api/config'; //axios
// Vue.prototype.$http = http;
实现
在apis目录下新建http.js, 内容同上面的 config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24// export default service;
/**
* 使用es6的export default导出了一个函数,导出的函数代替axios去帮我们请求数据,
* 函数的参数及返回值如下:
* @param {String} method 请求的方法:get、post、delete、put
* @param {String} url 请求的url:
* @param {Object} data 请求的参数
* @returns {Promise} 返回一个promise对象,其实就相当于axios请求数据的返回值
*/
export default function (method, url, data = null) {
method = method.toLowerCase();
if (method == "post") {
return service.post(url, data);
} else if (method == "get") {
return service.get(url, { params: data });
} else if (method == "delete") {
return service.delete(url, { params: data });
} else if (method == "put") {
return service.put(url, data);
} else {
console.error("未知的method" + method);
return false;
}
}在apis目录下新建首页模块 Home.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26//Home.js 用于定义用户的登录、注册、注销等
import req from "./http";
//定义接口
//在这里定义了一个登陆的接口,把登陆的接口暴露出去给组件使用
export const LOGIN = (params) => req("post", "/operator/login", params);
//这里使用了箭头函数,转换一下写法:
//export const LOGIN=function(req){
// return req('post','/operator/login',params)
//}
//定义注册接口
export const REG = (params) => req("post", "/operator/reg", params);
//定义注销接口
export const LOGOUT = (params) => req("post", "/operator/logout", params);
export const getCountData = (params) =>
req("get", "/home/getCountData", params);
export const getTableLabel = (params) =>
req("get", "/home/getTableLabel", params);
export const getTableData = (params) =>
req("get", "/home/getTableData", params);
export const getEchartData = (params) =>
req("get", "/home/getEchartData", params);
使用
在组件中引入依赖即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34<script>
// 导入的其他文件 例如:import moduleName from 'modulePath';
import * as HomeApi from 'apis/home';
export default {
//方法集合
methods: {
initData() {
HomeApi.getCountData().then(res => {
this.countData = res.data;
});
HomeApi.getTableLabel().then(res => {
this.tableLabel = res.data;
});
HomeApi.getTableData().then(res => {
this.tableData = res.data;
});
HomeApi.getEchartData().then(res => {
res = res.data;
this.processData(res);
});
},
//处理图形数据
processData(res) {
// ....
}
},
//创建完成 访问当前this实例
created() {
this.initData();
}
};
</script>
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 凉月の博客!
评论