vue封装请求

request.js文件

import axios from "axios";
import { Message } from "element-ui";
axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";

const service = axios.create({
  baseURL: "/" + process.env.VUE_APP_BASE_API,
});

service.interceptors.request.use(
  (config) => {
    config.headers["client_id"] = "dataexchange";
    config.headers["client_secret"] = "dataexchange";
    config.headers["deviceId"] = "web";
    //获取本地的token值
    const token = window.sessionStorage.getItem("token");
    const token_type = window.sessionStorage.getItem("token_type");
    config.headers["token"] = token;
    if (token_type === null && token === null) {
      config.headers['Authorization']='Basic ZGF0YWV4Y2hhbmdlOmRhdGFleGNoYW5nZQ=='
      // config.headers["Authorization"] = "Basic YXBwOmFwcA==";
    } else {
      config.headers["Authorization"] = token_type + " " + token;
    }
    // get请求映射params参数
    if (config.method === "get" && config.params) {
      let url = config.url + "?";
      for (const propName of Object.keys(config.params)) {
        const value = config.params[propName];
        var part = encodeURIComponent(propName) + "=";
        if (value !== null && typeof value !== "undefined") {
          if (typeof value === "object") {
            for (const key of Object.keys(value)) {
              let params = propName + "[" + key + "]";
              var subPart = encodeURIComponent(params) + "=";
              url += subPart + encodeURIComponent(value[key]) + "&";
            }
          } else {
            url += part + encodeURIComponent(value) + "&";
          }
        }
      }
      url = url.slice(0, -1);
      config.params = {};
      config.url = url;
    }
    return config;
  },
  (error) => {
    Promise.reject(error);
  }
);

service.interceptors.response.use(
  (config) => {
    const res = config;
    return res;
  },
  (error) => {
    if (error.response.status == "401") {
      let { message } = error;
      Message({
        message: "权限失效,请重新登录",
        type: "error",
      });
      sessionStorage.clear();
     
    } else if (error.response.status == "500") {
      let { message } = error;
      Message({
        message: "登录超时,请重新登录",
        type: "error",
      });
      sessionStorage.clear();
      location.href = "http://localhost:1001"
      
    }

    return Promise.reject(error);
  }
);
export default service;

http.js文件 封装请求文件

import service from "./request";

export function post(url, params) {
  return new Promise((resolve, reject) => {
    service
      .post(url, params)
      .then(
        (response) => {
          resolve(response.data);
        },
        (err) => {
          reject(err);
        }
      )
      .catch((error) => {
        reject(error);
      });
  });
}
export function postImport(url, params) {
  return new Promise((resolve, reject) => {
    service
      .post(url, params, {
        headers: {
          "Content-Type":
            "multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq",
        },
      })
      .then(
        (response) => {
          resolve(response.data);
        },
        (err) => {
          reject(err);
        }
      )
      .catch((error) => {
        reject(error);
      });
  });
}

export function putQs(url, params) {
  return new Promise((resolve, reject) => {
    service
      .put(url, params, {
        headers: { "Content-Type": "application/x-www-form-urlencoded" },
      })
      .then(
        (response) => {
          resolve(response.data);
        },
        (err) => {
          reject(err);
        }
      )
      .catch((error) => {
        reject(error);
      });
  });
}

export function get(url, params) {
  return new Promise((resolve, reject) => {
    service
      .get(url, { params: params })
      .then(
        (response) => {
          resolve(response.data);
        },
        (err) => {
          reject(err);
        }
      )
      .catch((error) => {
        reject(error);
      });
  });
}

export function del(url, params) {
  return new Promise((resolve, reject) => {
    service
      .delete(url, { params: params })
      .then(
        (response) => {
          resolve(response.data);
        },
        (err) => {
          reject(err);
        }
      )
      .catch((error) => {
        reject(error);
      });
  });
}

export function put(url, params) {
  return new Promise((resolve, reject) => {
    service
      .put(url, params)
      .then(
        (response) => {
          resolve(response.data);
        },
        (err) => {
          reject(err);
        }
      )
      .catch((error) => {
        reject(error);
      });
  });
}
export function upload(url, params) {
  return new Promise((resolve, reject) => {
    service
      .post(url, params, {
        headers: {
          "content-type": "application/octet-stream",
        },
      })
      .then(
        (response) => {
          resolve(response.data);
        },
        (err) => {
          reject(err);
        }
      )
      .catch((error) => {
        reject(error);
      });
  });
}
export function patch(url, params) {
  return new Promise((resolve, reject) => {
    service
      .patch(url, params)
      .then(
        (response) => {
          resolve(response.data);
        },
        (err) => {
          reject(err);
        }
      )
      .catch((error) => {
        reject(error);
      });
  });
}

export function downLoad(url, params) {
  return new Promise((resolve, reject) => {
    service
      .get(
        url,
        { params: params },
        {
          responseType: "arraybuffer",
          headers: {
            "Content-Type": "application/json; application/octet-stream",
          },
        }
      )
      .then(
        (response) => {
          resolve(response.data);
        },
        (err) => {
          reject(err);
        }
      )
      .catch((error) => {
        reject(error);
      });
  });
}

codeApi.js文件 封装请求头

import { get, post, put, del, patch, postQs, putQs } from './http'
import axios from 'axios'
let auth='Basic ZGF0YWV4Y2hhbmdlOmRhdGFleGNoYW5nZQ=='
let http = axios.create({
    baseURL: '/' + process.env.VUE_APP_BASE_API,
    headers:{
        client_id:'dataexchange',
        client_secret:'dataexchange',
        deviceId:'web',
        'Content-Type':'application/json; application/octet-stream',
        token:window.sessionStorage.getItem("token"),

    },
    responseType: 'blob',
  })
  //获取本地的token值
  const token = window.sessionStorage.getItem("token");
  const token_type = window.sessionStorage.getItem("token_type");
  http.interceptors.request.use(
    config => {
        if (token_type === null && token === null) {
            config.headers['Authorization'] = 'Basic ZGF0YWV4Y2hhbmdlOmRhdGFleGNoYW5nZQ=='
        } else {
            config.headers['Authorization'] = token_type + ' ' + token
        }
        return config
    }
)
// 执行完需要调更新json的接口
export const optionData=(params)=>{
    return get('/dd/define/findCacheByCode',params)
}
export function download(fileName){
    return http({
        method:'get',
        url:'/common/download',
        params:{fileName:encodeURI(fileName),delete:true},
        headers:{Authorization:auth}
    })
}
export default http

api.js接口文件
auth-tkn为跨域代理

import { get, post, put, del, patch, postQs, putQs } from '@/api/http'

// token
export function getToken(params) {
    return get('auth-tkn' + '/oauth/token', params)
}
export function goOut(params) {
    return get('auth-tkn' + '/oauth/logout', params)
}

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中使用axios进行网络请求是非常常见的。我们可以对axios进行封装来方便地在Vue中使用。这里提供一个例子,包括axios的安装、请求拦截器、设置请求超时时间以及post请求头的设置。 首先,我们需要安装axios,可以通过npm install axios命令来进行安装。后,我们可以在Vue项目中的main.js文件中引入axios,并且将其挂载到Vue原型上,这样在组件中就可以通过this.$http来进行访问。接下来,我们可以封装一个request函数,封装axios的请求拦截器、设置请求超时时间以及post请求头的设置。 下面是一个简单的封装axios请求的例子: 1. 安装axios ``` npm install axios ``` 2. 在main.js中引入axios并挂载到Vue原型上 ``` import axios from 'axios' Vue.prototype.$http = axios ``` 3. 封装request函数 ``` import axios from 'axios' import store from '@/store/index' // 创建axios实例 const service = axios.create({ timeout: 10000 // 请求超时时间 }) // 请求拦截器 service.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) } ) // 响应拦截器 service.interceptors.response.use( response => { // 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据 // 否则的话抛出错误 if (response.status === 200) { return Promise.resolve(response.data) } else { return Promise.reject(response) } }, error => { // 服务器返回不是 2 开头的情况,会进入这个回调 // 可以根据后台返回的状态码进行不同的操作 if (error.response.status) { switch (error.response.status) { // 401: 未登录 // 未登录则跳转登录页面,并携带当前页面的路径 // 在登录成功后返回当前页面,这一步需要在登录页操作。 case 401: router.replace({ path: '/login', query: { redirect: router.currentRoute.fullPath } }) break // 403 token过期 // 登录过期对用户进行提示 // 清除本地token和清空vuex中token对象 // 跳转登录页面 case 403: Toast({ message: '登录过期,请重新登录', duration: 1000, forbidClick: true }) // 清除token localStorage.removeItem('token') store.commit('loginSuccess', null) // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面 setTimeout(() => { router.replace({ path: '/login', query: { redirect: router.currentRoute.fullPath } }) }, 1000) break // 404请求不存在 case 404: Toast({ message: '网络请求不存在', duration: 1500, forbidClick: true }) break // 其他错误,直接抛出错误提示 default: Toast({ message: error.response.data.message, duration: 1500, forbidClick: true }) } return Promise.reject(error.response) } } ) export default service ``` 4. 在组件中使用request函数 ``` import request from '@/utils/request' // 发送get请求 request.get(url, params).then(res => { console.log(res) }).catch(err => { console.log(err) }) // 发送post请求 request.post(url, data).then(res => { console.log(res) }).catch(err => { console.log(err) }) ``` --相关问题--:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值