首页 > 其他分享 >Vue axios简易封装

Vue axios简易封装

时间:2023-03-19 21:33:06浏览次数:34  
标签:axios 封装 请求 url token Vue return data

1.安装axios

npm install axios -g  

2.创建utils文件夹,新建文件request.js对axios进行封装

3.设置请求超时

通过axios.defaults.timeout设置默认的请求超时时间。例如超过了10s,就会告知用户当前请求超时,请刷新等。 axios.defaults.timeout = 10000;

4.post请求头的设置

post请求的时候,我们需要加上一个请求头,所以可以在这里进行一个默认的设置,即设置post的请求头为application/x-www-form-urlencoded;charset=UTF-8 axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';

5.设置请求拦截器

这里说一下token,一般是在登录完成之后,将用户的token通过localStorage或者cookie存在本地,然后用户每次在进入页面的时候(即在main.js中),会首先从本地存储中读取token,如果token存在说明用户已经登陆过,则更新vuex中的token状态。然后,在每次请求接口的时候,都会在请求的header中携带token,后台人员就可以根据你携带的token来判断你的登录是否过期,如果没有携带,则说明没有登录过。 vuex
// 先导入vuex,因为我们要使用到里面的状态对象
// vuex的路径根据自己的路径去写
import store from '@/store/index';

// 请求拦截器axios.interceptors.request.use(    
    config => {        
        // 每次发送请求之前判断vuex中是否存在token        
        // 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况
        // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断 
        const token = store.state.token;        
        token && (config.headers.Authorization = token);        
        return config;    
    },    
    error => {        
        return Promise.error(error);    
})
sessionStorage
// axios请求拦截
axios.interceptors.request.use(config => {
    //为请求头对象,添加token验证的Authorizaion字段
    config.headers.Authorization = window.sessionStorage.getItem("token");
    return config
})

6.封装get方法和post方法

import axios from "axios";
import qs from "qs";

let baseURL = "http://127.0.0.1:8080/";

export default {
  post(url, data) {
    return axios({
      method: "post",
      url: `${baseURL}${url}`,
      data: qs.stringify(data),
      timeout: 10000
    });
  },
  put(url, data) {
    return axios({
      method: "put",
      url: `${baseURL}${url}`,
      data: qs.stringify(data),
      timeout: 10000
    });
  },
  delete(url, data) {
    return axios({
      method: "delete",
      url: `${baseURL}${url}`,
      // url,
      data: qs.stringify(data),
      timeout: 10000,
      headers: {
        "Content-Type": "application/x-www-form-urlencoded"
      }
    });
  },
  get(url, params) {
    return axios({
      method: "get",
      url: `${baseURL}${url}`,
      params: params, // get 请求时带的参数
      timeout: 10000
    });
  }
}

7.总结

import  axios  from  "axios";
import  qs  from  "qs";
import store from '@/store/index';

let  baseURL  =  "http://127.0.0.1:8888/api/private/v1/";
// let baseURL = "";
axios.defaults.timeout = 10000;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';

// 请求拦截器
// axios.interceptors.request.use(    
//     config => {        
//         // 每次发送请求之前判断vuex中是否存在token        
//         // 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况
//         // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断 
//         const token = store.state.token;        
//         token && (config.headers.Authorization = token);        
//         return config;    
//     },    
//     error => {        
//         return Promise.error(error);    
// })
// const test = {} 替换 export default
export  default  {
    post(url,  data)  {
        return  axios({
            method:   "post",
            url:   `${baseURL}${url}`,
            data:  qs.stringify(data),
            timeout:  10000
        });
    },
    put(url,  data)  {
        return  axios({
            method:   "put",
            url:   `${baseURL}${url}`,
            data:  qs.stringify(data),
            timeout:  10000
        });
    },
    delete(url,  data)  {
        return  axios({
            method:   "delete",
            url:   `${baseURL}${url}`,
            // url,
            data:  qs.stringify(data),
            timeout:  10000,
            headers:  {
                "Content-Type":   "application/x-www-form-urlencoded"
            }
        });
    },
    get(url,  params)  {
        return  axios({
            method:   "get",
            url:   `${baseURL}${url}`,
            params:  params,
              // get 请求时带的参数
            timeout:  10000
        });
    }
}
   

8.使用

引用全局配置main.js
import request from './utils/request.js'

Vue.prototype.$http = request; // 将api挂载到vue的原型上
使用
async getdata(){
      const { data: res } = await this.$http.get('/user/playlist',{uid:32953014})
      console.log(res);
}

标签:axios,封装,请求,url,token,Vue,return,data
From: https://www.cnblogs.com/happy-p/p/17234373.html

相关文章

  • SpringBoot+Vue+EasyExcel实现excel简单导入导出
    1.先导入EasyExcel依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.......
  • 谈谈 Vue shallowRef 和 shallowReactive
    深层次响应式reactive和ref创建的对象都是深层次的,对象的根属性和嵌套属性都是响应式的。深层次转换是递归地转为响应式,对象里的每个属性访问都将触发代理的依赖追踪,......
  • Vuex模块式开发
    背景:2个组件:home和search,将store仓库拆分成2个小仓库,home和search两个小仓库用于管理自己模块的数据store文件夹下新建2个文件夹:home和searchhome下index.js//home模块......
  • Vue和React项目中生成唯一ID
    Vue中唯一ID生成方式React中唯一ID生成方式......
  • vue中全局过滤器
    //全局的过滤器,进行时间的格式化Vue.filter('dateFormat',function(dateStr){//根据给定的实际那字符串,得到绑定的时间vardt=newDate(dateStr)//yyy--mm--ddvar......
  • vue+element-ui刷新路由的时候保持在当前页面小技巧
    前言:很多小伙伴在练习vue项目的时候会遇到这样一个问题,就是刷新页面的时候,路由没有显示到当前页面,而是重定向回首页了,那么该怎么解决呢,就请各位小伙伴看下面的内容介绍吧......
  • Vue 搜索案例:gitHub 用户搜索案例
    一:界面示例效果......
  • 使用vue2+element-ui+axios实现后台管理系统的增删改查
    以下仅作为自己个人学习使用前言:需要后端的接口已经在另外一篇博客写了,需要的小伙伴们可以去那边参考,下面是链接https://www.cnblogs.com/Amyel/p/17233060.html正片......
  • vuex的使用
    安装依赖cnpminstall--savevuex@3.6.21.新建文件夹store,index.js文件importVuefrom'vue'importVuexfrom'vuex'Vue.use(Vuex);//state:仓库存储数据的......
  • 安装axios和二次封装
    cnpminstall--saveaxios@0.24 二次封装:项目中新建api目录,及request.js//对于axios进行二次封测importaxiosfrom'axios';//1.利用axios读写的方法create,创......