Vue统一请求封装

386 阅读1分钟

api请求封装

import axios from "axios";
import util from "@/libs/util";  //Cookies设置
import { Message } from "element-ui";

function showErrorMessage(message, type = "error") {
  Message({
    message: message,
    type: type
  });
}

function getBaseUrl() {
  var baseURL = "http://www.fff.ffff:3000";
  return baseURL;
}

// 创建一个 axios 实例
const service = axios.create({
  baseURL: "",
  // timeout: 20000 // 请求超时时间
});

// request 请求拦截器
service.interceptors.request.use(
  config => {
    const token = util.cookies.get("token");
    config.headers["Authorization"] = "Bearer " + token;
    config.headers["Content-Language"]="Zh";
    if (!config.url.startsWith("http")) {
      let baseUrl = getBaseUrl();
      baseUrl = baseUrl.endsWith("/") ? baseUrl : baseUrl + "/";
      let apiUrl = config.url.startsWith("/")
        ? config.url.substring(1, config.url.length)
        : config.url;
      config.url = baseUrl + apiUrl;
    }
    return config;
  },
  error => {
    // 发送失败
    return Promise.reject(error);
  }
);
 
// response 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data;
    const { code, success } = res;
    if (code === undefined || success === undefined) {
      // 如果没有 code success 代表这不是项目后端开发的接口
      showErrorMessage("接口返回数据不满足UI要求");
    }
    return res;
  },
  async error => {
    
    let res = { success: false, code: 0, message: "" };
    if (error.response) {
      var data = error.response.data;
      if (_.isPlainObject(data)) {
        console.log("error",data);
        res = {
          success: false,
          code: error?.response?.data?.status
            ? error?.response?.data?.status
            : 0,
          message: error.message,
          ...error.response.data
        };
      } else if (_.isString(data)) {
        if (_.isNumber(error.response.status)) {
          res.code = error.response.status;
        }
        res.message = data || error.response.statusText;
      }
    } else {
      res.message = error.message;
    }
    return res;
  }
);

export default service;

Cookies 值设置文件

import Cookies from "js-cookie"; //npm i js-cookie -S
const cookies = {};

/**
 * @description 存储 cookie 值 
 * @param {String} value cookie value
 * @param {Object} cookieSetting cookie setting
 */
cookies.set = function(name = "default", value = "", cookieSetting = {}) {
  let currentCookieSetting = {
    expires: 1  //Cookies 默认保存时间,单位:天
  };
  Object.assign(currentCookieSetting, cookieSetting);
  Cookies.set(`admin-${name}`, value, currentCookieSetting);
};

/**
 * @description 拿到 cookie 值
 * @param {String} name cookie name
 */
cookies.get = function(name = "default") {
  return Cookies.get(`admin-${name}`);
};

/**
 * @description 拿到 cookie 全部的值
 */
cookies.getAll = function() {
  return Cookies.get();
};

/**
 * @description 删除 cookie
 * @param {String} name cookie name
 */
cookies.remove = function(name = "default") {
  return Cookies.remove(`admin-${name}`);
};

export default cookies;

api文件使用

 import request from "@/request/xdIndex.js";

 // 模块名
const module = "XD";
// 控制器名
const controller = "XDLogistics";
// 路径
const path = `${module}/${controller}`;
 

// 查询
 export const getPageList = (params) => {
   return request.post(`/api/v2/${path}/GetdataList`, params);
 };