项目间调用接口

vue 项目间有相同数据但是接口没有公共请求头的,在拦截器里进行请求头切换操作,需要切换时,传一个自定义的变量,当拦截器监测到该变量时,进行切换请求头   大致思路就是如此!下面直接上拦截器部分代码,

// 在http.js中引入axios
import axios from "axios"; // 引入axios
import QS from "qs"; // 引入qs模块,用来序列化post类型的数据,后面会提到、
import {
  Notification
} from "element-ui";
import store from "../../store";
import router from "../../router/index";
// vant的toast提示框组件,大家可根据自己项目中使用的ui组件进行更改
// import { Toast } from 'vant'
// if (process.env.NODE_ENV == 'development') {
// 	axios.defaults.baseURL = 'https://www.baidu.com';}
// else if (process.env.NODE_ENV == 'debug') {
// 	axios.defaults.baseURL = 'https://www.ceshi.com';
// }
// else if (process.env.NODE_ENV == 'production') {
// 	axios.defaults.baseURL = 'https://www.production.com';
// }
var $url = store.state.$url;
axios.defaults.baseURL = $url;
axios.defaults.timeout = 10000;
// 其他项目请求地址公共部分
var $rewurl = store.state.$rewurl

// axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';
//http 请求拦截器
axios.interceptors.request.use(
  config => {
    const token = store.state.token;
    config.data = {
      body: {
        ...config.data
      }
    };
    config.headers = {
      "Content-Type": "application/json"
    };
    // 如存在token,则在请求的header中携带token
    token && (config.headers.Authorization = token);
    //调用其他项目接口时,传入任意一个值作为判断依据
    if (config.data.body.newurl) {
      delete config.data.body.newurl
      delete config.headers.Authorization
      config.baseURL = $rewurl
      
    }
    return config;
  },
  error => {
    return Promise.reject(err);
  }
);

// 响应拦截器
axios.interceptors.response.use(
  response => {
    if (response.status === 200) {
      // 如果返回的状态码为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({
            name: "login",
            query: {
              redirect: "401"
            }
          });
          // Notification({
          //     title: "提示",
          //     dangerouslyUseHTMLString: true,
          //     message: `<strong style="color:#F56C6C">${error}</strong>`,
          //     type: "error",
          //     offset: 10,
          //     duration: 2500,
          //     customClass: "tishikaung",
          // });
          break;
          // 403 token过期
          // 登录过期对用户进行提示
          // 清除本地token
          // 跳转登录页面
        case 403:
          // Notification({
          //     title: "提示",
          //     dangerouslyUseHTMLString: true,
          //     message: `<strong style="color:#F56C6C">登录过期,请重新登录</strong>`,
          //     type: "error",
          //     offset: 10,
          //     duration: 2000,
          //     customClass: "tishikaung",
          // });
          // 清除token
          removeCookie("token");
          // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面
          setTimeout(() => {
            router.replace({
              path: "/login",
              query: {
                redirect: router.currentRoute.fullPath
              }
            });
          }, 1000);
          break;
          // 404请求不存在
        case 404:
          // Notification({
          //     title: "提示",
          //     dangerouslyUseHTMLString: true,
          //     message: `<strong style="color:#F56C6C">网络请求不存在</strong>`,
          //     type: "error",
          //     offset: 10,
          //     duration: 2000,
          //     customClass: "tishikaung",
          // });
          break;
          // 其他错误,直接抛出错误提示
        default:
          // Notification({
          //     title: "提示",
          //     dangerouslyUseHTMLString: true,
          //     message: `<strong style="color:#F56C6C">${error}</strong>`,
          //     type: "error",
          //     offset: 10,
          //     duration: 2500,
          //     customClass: "tishikaung",
          // });
      }
      return Promise.reject(error.response);
    }
  }
);

/**
 * get方法,对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url, queryParams) {
  return new Promise((resolve, reject) => {
    axios
      .get(url, {
        params: queryParams
      })
      .then(response => {
        resolve(response.data);
      })
      .catch(error => {
        reject(error);
      });
  });
}

/**
 * post方法,对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function post(url, postData) {
  return new Promise((resolve, reject) => {
    axios
      .post(url, postData)
      .then(res => {
        resolve(res.data);
      })
      .catch(err => {
        reject(err.data);
      });
  });
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初学者0721

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值