123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- // 封装axios请求
- /**axios封装
- * 请求拦截、相应拦截、错误统一处理
- */
- import axios from 'axios';
- import QS from 'qs';
- import store from '../store/index'
- import { Message, Loading } from 'element-ui'
- import { basePath, logFlag } from '@/config/env'
- import router from '../router/index'
- // 环境的切换
- if (process.env.NODE_ENV == 'development') {
- axios.defaults.baseURL = '/api';
- } else if (process.env.NODE_ENV == 'debug') {
- axios.defaults.baseURL = '';
- } else if (process.env.NODE_ENV == 'production') {
- axios.defaults.baseURL = 'http://api.123dailu.com/';
- }
- // 请求超时时间
- axios.defaults.timeout = 10000;
- // post请求头
- axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
- console.log(store.state.comVal.token, 'this.$store.state.comVal.token111', localStorage.getItem('token'));
- axios.defaults.headers.post['token'] = localStorage.getItem('token') || store.state.comVal.token;
- axios.defaults.headers.get['token'] = localStorage.getItem('token') || store.state.comVal.token;
- // 请求拦截器
- axios.interceptors.request.use(
- config => {
- // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
- // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
- const token = localStorage.getItem('token');
- if (!token) {
- router.push('/login')
- }
- token && (config.headers.Authorization = token);
- return config;
- },
- error => {
- return Promise.error(error);
- })
- // 响应拦截器
- axios.interceptors.response.use(
- response => {
- if (response.status === 200) {
- return Promise.resolve(response);
- } else {
- return Promise.reject(response);
- }
- },
- // 服务器状态码不是200的情况
- error => {
- 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:
- this.$message.error('登录过期,请重新登录');
- // 清除token
- localStorage.removeItem('token');
- store.commit('loginSuccess', null);
- // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面
- setTimeout(() => {
- router.replace({
- path: '/login',
- query: {
- redirect: router.currentRoute.fullPath
- }
- });
- }, 1000);
- break;
- // 404请求不存在
- case 404:
- this.$message.error('网络请求不存在');
- break;
- // 其他错误,直接抛出错误提示
- default:
- this.$message.error(error.response.data.message);
- }
- return Promise.reject(error.response);
- }
- }
- )
- let reqUrl = ''
- /**
- * get方法,对应get请求
- * @param {String} url [请求的url地址]
- * @param {Object} params [请求时携带的参数]
- */
- function get (url, params) {
- if (!axios.defaults.headers.get['token']) {
- axios.defaults.headers.get['token'] = localStorage.getItem('token') || store.state.comVal.token;
- }
- reqUrl = basePath + url
- return new Promise((resolve, reject) => {
- axios.get(reqUrl, {
- params: params
- })
- .then(res => {
- if (res.data.code != 200 && localStorage.getItem('token')) {
- Message({
- message: res.data.msg,
- type: 'error'
- });
- }
- console.log(res.data);
- resolve(res.data);
- })
- .catch(err => {
- reject(err.data)
- })
- });
- }
- /**
- * post方法,对应post请求
- * @param {String} url [请求的url地址]
- * @param {Object} params [请求时携带的参数]
- */
- function post (url, params) {
- if (!axios.defaults.headers.post['token']) {
- axios.defaults.headers.post['token'] = localStorage.getItem('token') || store.state.comVal.token;
- }
- reqUrl = basePath + url
- return new Promise((resolve, reject) => {
- axios.post(reqUrl, QS.stringify(params))
- .then(res => {
- console.log(res, 'resres');
- if (res.data.code != 200 && localStorage.getItem('token')) {
- Message({
- message: res.data.msg,
- type: 'error'
- });
- }
- resolve(res.data);
- })
- .catch(err => {
- console.log(err, 'errerrerr');
- reject(err.data)
- })
- });
- }
- export default () => {
- if (typeof window.$http == 'undefined') {
- window.$http = {
- post: post,
- get: get
- }
- }
- }
|