一、请求和传递参数
在 Vue 中,发送请求一般在 created 钩子中,当然放在 mounted 钩子中也没问题。
以下请求的前提都是安装了 axios,并且 import axios from 'axios' 成功导入
Axios官网链接
1、get 请求
- get 请求传参,在地址里面通过
?xxx=123 的形式
async created() {
let res = await axios.get(
"http://testapi.xuexiluxian.cn/api/slider/getSliders?xxx=123"
);
console.log(res);
}
2、post 请求
async created() {
let res = await axios.post('http://testapi.xuexiluxian.cn/api/course/mostNew', {
pageNum: 1,
pageSize: 5
})
console.log(res);
}
3、axios 请求配置
async created() {
let res = await axios({
url: 'http://testapi.xuexiluxian.cn/api/course/mostNew',
method: 'post',
headers: {},
data: {
pageNum: 1,
pageSize: 5
},
params: {},
timeout: 0,
responseType: 'json'
})
console.log(res);
}
二、axios 的二次封装
目的:方便统一管理
注意:先安装 axios 才可以使用,终端键入:npm i axios ,之后回车安装它
1、配置拦截器
在 src 目录下新建 utils 文件夹,该文件夹下创建 request.js 文件
request.js 文件
- 首先创建 axios 对象
- 添加请求拦截器(前端给后端的参数)
- 添加响应拦截器(后端给前端的数据)
import axios from 'axios'
const instance = axios.create({
baseURL: 'http://testapi.xuexiluxian.cn/api',
timeout: 2000
})
instance.interceptors.request.use(function (config) {
return config;
}, function (error) {
return Promise.reject(error);
});
instance.interceptors.response.use(function (response) {
return response;
}, function (error) {
return Promise.reject(error);
});
export default instance
2、发送请求
在需要发请求的组件中,导入 request.js , 之后发送请求即可
App.vue 组件
- 在需要使用的组件中
导入 request - 直接发送请求即可
<template>
<div id="app">前端杂货铺</div>
</template>
<script>
import request from "./utils/request";
export default {
name: "App",
data() {
return {};
},
created() {
request({
url: "/course/category/getSecondCategorys",
}).then((res) => {
console.log(res);
});
request({
url: "/course/mostNew",
method: "post",
data: {
pageNum: 1,
pageSize: 5,
},
}).then((res) => {
console.log(res);
});
}
}
</script>
三、API 的解耦
API 解耦的目的:
- 为了同一个接口可以多次使用
- 为了方便 api 请求统一管理
1、配置文件对应的请求
在 src 目录下新建 api 文件夹,该文件夹下创建 xxx.js 文件,配置对应请求
./api/course.js 文件
import request from "../utils/request";
export function getSendCategorys() {
return request({
url: '/course/category/getSecondCategorys',
})
}
export function courseSearch(data) {
return request({
url: '/course/search',
method: 'post',
data
})
}
2、获取请求的数据
App.vue 组件
<template>
<div id="app"></div>
</template>
<script>
import { getSendCategorys, courseSearch } from "./api/course";
export default {
name: "App",
data() {
return {};
},
created() {
getSendCategorys().then((res) => {
console.log(res);
});
courseSearch({
pageNum: 1,
pageSize: 5
}).then((res) => {
console.log(res);
});
}
}
文件结构如下:
四、总结
对 axios 的二次封装,在企业级项目中是 必须 要配置的。
因为经过封装的 axios,更容易使用和管理,并且可以 减少代码量,让 逻辑更清晰
这里是 前端杂货铺,期待您的 三连 + 关注
|