美文网首页Vue
二次封装axios并使用

二次封装axios并使用

作者: 候鸟与暖风 | 来源:发表于2019-08-02 12:03 被阅读0次
    1.新增axios.js文件,内容如下(二次封装axios,方便我们后续项目的使用
    参数的数据格式分两种
    1.json对象类型  {name:1,password:1356565}
    2.字符串类型    name:1,password:1356598   (需要下载qs插件进行转换)
    
    import axios from 'axios'
    import Qs from 'qs'(如果只是get请求就不需要引qs)
    import { Message } from 'element-ui'  //引入element中的弹窗,这个不是必须的可根据项目来
     
    axios.defaults.withCredentials = false;  //false  不跨域  true 跨域
    axios.defaults.headers.common['token'] = localstorage.getItem('token'); //设置请求头,这个是不是必须的
    
    export  default function(path, params, method = "GET", headerType = "json")=>{
       let baseURL = "", data = {}
        baseURL = process.env.BASE_URL //这里是在config里面配置了请求路径
    
          //设置请求头
        if (method === 'post') {   //post请求
            if (headerType === "json") {
                axios.defaults.headers["Content-Type"] = 'application/json;charset=UTF-8'
                data = params
            } else {
                axios.defaults.headers["Content-Type"] = 'application/x-www-form-urlencoded;charset=UTF-8'
                data = Qs.stringify(params);
            }
        }
    
        //get请求
        if (method === 'get') {
            if (headerType == !'json') {
                axios.defaults.headers["Content-Type"] = 'application/x-www-form-urlencoded;charset=UTF-8'
            }
            data = Qs.stringify(params);
            path = path + '?' + data
            data = {};
        }
         // 请求拦截
        axios.interceptors.request.use(function (config) {
            let token = storage.getStorage("token")
            if (token) {
                config.headers['token'] = token;
            }
            return config;
           }, function (error) {
            return Promise.reject(error);
           });
    
          //响应拦截
          axios.interceptors.response.use(response=>{
              if (response.headers.token) {
                storage.setStorage('token', response.headers.token)
              }
              if (response.data.statusCode == 20009) {  //这里的状态码是根据后台设置的来
                   Message.error({ message: '登录过期,请重新登录' })
               }
               return response;
               },error=>{
                  return Promise.resolve(error.response)
            })
    
           //发送请求
          return new Promise(()=>{
             axios({
                baseURL
                method
                url: path,
                headers,
                data:params,
                timeout:6000,
                }).then(result=>{
                    resolve(result.data)
                }).catch(err=>{
                    reject(err)
                })
             })
    }
    
    2.新增api.js文件,内容如下(项目中所有的请求地址以及方式等都放在这个文件中,并导出
    import http from '@/utils/axios'  //引入我们二次封装的axios.js文件
    
    
    a. post请求,参数是json类型
              export const passwordUpdate = function (params) { 
                    const url= '/account/accountUpdate';  //请求的地址
                    return https(PASSWORDUPDARE, params, "post");  
              };
    
    b.post请求,参数是字符串类型
               export const passwordUpdate = function (params) {
                   const url= "/account/accountUpdate";  //请求的地址
                    return https(PASSWORDUPDARE , params, "post", "from");
                };
    
    c.get请求
               export const passwordUpdate = function (params) {
                    const url= "/account/accountUpdate";  //请求的地址
                    return https(PASSWORDUPDARE , params);
                };
    
    

    3.页面中使用我们封装好的请求

    1.先引入:import { requestLogin } from '@/api/api'  //需要调用哪个接口,就引入哪个,按需引入
    2.使用
    let params = {
      name:'zhangsan',
      password:'123456'
    }
    requestLogin(params ).then(res=>{   //我们只需要传递一个参数,其他的都已经在api.js中写好了
        //获取到后台响应的参数res,并进行操作
    })
    

    相关文章

      网友评论

        本文标题:二次封装axios并使用

        本文链接:https://www.haomeiwen.com/subject/gcccdctx.html