VUE的封装接口、axios

src文件下创建http文件夹创建index.js和request.js

index.js:

import axios from 'axios'

/* 创建一个axios实例化对象instance */

var instance = axios.create({

    /* 基础路径 */

    baseURL: 'https://************************/v1/',

    /* 设置超时时间 */

    timeout: 3000

});

// 请求拦截器

instance.interceptors.request.use(

    config => {

        // 每次发送请求之前判断是否存在token

        // 如果存在,则统一在http请求的header都加上token,

        // 这样后台根据token判断你的登录情况,此处token一般是用户完成登录后储存到localstorage里的

        localStorage.token && (config.headers.Authorization = localStorage.token)

        return config

    },

    error => {

        return Promise.error(error)

    })

// 响应拦截器

axios.interceptors.response.use(response => {

    return response

  }, error => {

    return error

  })

/* 参数methdos默认值是get,path表示具体路径,post需要给data传参默认值是空对象,

get请求需要给params传参默认值是空对象 */

export const httpServe = (path, params = {}, method = 'get', data = {}) => {

    return new Promise((resolve, reject) => {

        instance({

            url: path,

            params,

            method,

            data

        })

            .then(res => {

                resolve(res)

            })

            .catch(err => {

                reject(err)

            })

    })

}

/*这种调用的写法 必须要按照顺序 */

/* get请求的调用方法 */

/* httpServe('users',{name:'zhangsan'}) */

/* post请求的调用方法 */

/* httpServe('login',{},'post',{username:'admin',password:'123123'})  */

request.js:

import {httpServe} from '@/http/index.js'

/* 登录 */

export const loginPost = (path,data)=> httpServe(path,{},'post',data);

/* 左侧菜单列表 */

export const menusGet = (path,params)=> httpServe(path,params);

/* 用户列表 */

export const usersGet = (path,params)=> httpServe(path,params);

/* 添加用户 */

export const addusersPost = (path,data)=> httpServe(path,{},'post',data);


修改之前LoginView.vue:

methods: {

      submitForm(formName) {

        this.$refs[formName].validate((valid) => {

          /* el-form组件的validate方法 在回调函数中

          如果valid为true 则表示表单校验通过

          为false则表示不通过 */

          if (valid) {

            loginPost('login',{

              username:this.ruleForm.username,

              password:this.ruleForm.password

            })

            .then(res=>{

              let {data,meta} = res.data;

              if(meta.status==200){

                this.$message.success(meta.msg);

                /* 当登录成功 把用户名和token存入本地缓存中方便后续使用 */

                localStorage.username = data.username;

                localStorage.token = data.token;

                /* 登录成功后,过一秒跳转首页 */

                setTimeout(()=>{

                  this.$router.push({name:'index'})

                },1000)

              }else{

                /* 用户名密码不正确的时候出现警告 */

                this.$message.warning(meta.msg);

              }

            })

            .catch(err=>{

              console.log(err)

            })

          } else {

            this.$message.error('您输入的有误');

          }

        });

      },

修改之前IndexView.vue:

 methods: {

    getNavList: function () {

      menusGet("menus")

        .then((res) => {

          let { data, meta } = res.data;

          /* 数据获取成功 */

          if (meta.status == 200) {

            this.navList = data;

            /* 动态添加路由菜单 */

            /* 因为第一个路由是默认,所以我们从第二个路由开始动态添加 */

            /* slice不会改变原数据 而splice会 */

            localStorage.arrRoute = JSON.stringify(this.navList.slice(1));

            /* 使用minixs中的添加动态路由的公共方法 */

            this.createRouteFn();

          } else {

            /* 防止数据获取失败,给出相应的后台提示 */

            this.$message.error(meta.msg);

          }

        })

        .catch((err) => {

          console.log(err);

        });

    },

  },

修改之前UsersView.vue:

getTableDate() {

      usersGet("users", {

        /* 当前页 */

        pagenum: this.currentPage,

        /* 一页展示多少条 */

        pagesize: this.pagesize,

      })

        .then((res) => {

          let { data, meta } = res.data;

          /* 当状态为200表示数据获取成功 */

          if (meta.status == 200) {

            /* 把数据给到tableData数组中 */

            this.tableData = data.users;

            /* 把数据中总条数给到total */

            this.total = data.total;

          } else {

            /* 如果获取数据有误,给出相应提示 */

            this.$message.error(meta.msg);

          }

        })

        .catch((err) => {

          this.$message.error(err);

        });

    },

你可能感兴趣的:(VUE的封装接口、axios)