之所以要二次封装axios,是有一些公用的事情,每次请求都要做;
src 目录下 ,新建一个文件夹,命名为 utils ,然后在这个文件夹里面 ,新建一个js文件,命名为 request.js
axios 二次封装,在 request.js 里写以下代码:注意: 在此之前 要在自己的项目里 安装aixos
命令为:npm i axios -S
// 对 axios 进行集中管理(对axios二次封装)
import axios from "axios";
// 导入Vue
import Vue from "vue";
import Toast from "@/plugin/Toast"; //之前写的toast插件
Vue.use(Toast);
//设置默认:请求域名,超时时间
const request = axios.create({
baseURL: "http://localhost:8080", //默认请求域名
timeout: 5000, //请求超时 请求5秒还没好,就返回失败
});
//对请求进行拦截,添加加载提示 token config请求配置
request.interceptors.request.use(function (config) {
// console.log(config);
// console.log("请求加载中...");
Toast.show("加载中...", 5000); // 显示加载提示
//返回配置
return config;
//拦截响应头 ,关闭加载提示,(ajax 结束)
request.interceptors.response.use(
function (res) {
// console.log("加载结束....");
Toast.hide(); // 请求结束,关闭加载提示
return res;
},
function (err) {
Toast.hide();
return err;
}
);
export default request;
//interceptors 拦截 request 请求 response 响应 config配置
封装api
在 src 目录下 ,新建一个文件夹,命名为 api ,然后在这个文件夹里面 ,新建一个js文件,命名为 home.js

home.js 里写以下代码:// 导入二次封装好的请求工具
import request from "@/utils/request";
function stringify(data) {
var str = "";
for (var k in data) {
str += k + "=" + data[k] + "&";
}
// 不要最后一个&
return str.slice(0, -1);
}
function GetHomePage(data) {
return request.post(
"/v1/home/page", //请求地址
stringify(data), // 请求的数据
{ headers: { "Content-Type": "application/x-www-form-urlencoded" } } //请求头
);
}
export { GetHomePage };
在LoginView.vue 里面使用封装好的axios,详细代码如下
template
<template>
<div>
<h1>登录h1>
用户名:<input type="text" v-model="user.name" /> <br />
密码:<input type="password" v-model="user.password" /> <br />
<button @click="login()">登录button>
<button @click="$notify.show('为什么会这样', 'gold')">自定义通知button>
div>
template>
//导入登录的方法
import { Login } from "@/api/user.js";
export default {
data() {
return {
user: { name: "", password: "" },
};
},
methods: {
login() {
//通过axios,发起post 请求,登录
//集中管理,axios 统一请求地址,请求都携带token
this.$toast.show();
Login(this.user)
.then((res) => {
//如果code,200存储user 和token
if (res.data.code === 200) {
this.$notify.success(res.data.msg);
//存储token 和user , JSON.stringify 把js 对象转换为json 字符串
localStorage.setItem("token", res.data.token);
localStorage.setItem("user", JSON.stringify(res.data.user));
//登录成功跳转到用户页面
// this.$router.replace("/user");
//获取查询参数
var redirect = this.$route.query.redirect || "/";
this.$router.replace(redirect);
} else {
this.$notify.danger(res.data.msg);
//登录失败
localStorage.removeItem("token");
localStorage.removeItem("user");
}
})
.catch((err) => {
// 网络失败
this.$notify.danger("登录失败");
console.log(err);
localStorage.removeItem("token");
localStorage.removeItem("user");
});
},
},
};
</script>


今天的分享就到这里了~~