【Vue】axios的二次封装和使用(附详细代码)

导读:本篇文章讲解 【Vue】axios的二次封装和使用(附详细代码),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Vue中的axios


1、为什么要二次封装axios

之所以要二次封装axios,是有一些公用的事情,每次请求都要做;

  • 添加token
  • 添加加载提示信息和关闭加载提示
  • 统一请求地址

2、封装api

  • 集中管理api
  • 重复利用
  • “进入登录方法” 写好了,放在登录页面,只能在登录页面用;如果放单独文件中,多个页面就可以使用 “登录方法”

3、代码实现

  • 封装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 };

4、使用

  • 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>
  • javascript
//导入登录的方法
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>
  • css
<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>

5、效果实现

在这里插入图片描述
在这里插入图片描述

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/46284.html

(0)
小半的头像小半

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!