赞
踩
之所以要二次封装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>
<style lang="scss" scoped> input, button { caret-color: #4e6ef2; position: relative; z-index: 17; box-sizing: border-box; display: block; padding: 10px 20px; margin: 0; height: 48px; line-height: 20px; width: 336px; border: 1px solid #b8b8b8; font-size: 18px; color: #1f1f1f; transition: 0.3s; font-family: PingFangSC-Regular, Tahoma, Helvetica, "Microsoft Yahei", "微软雅黑", Arial, STHeiti; border-radius: 8px; } </style>
今天的分享就到这里了~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。