vue封装请求接口

在这里插入图片描述

axios请求的相关代码放置于:src→api→index.js. indext.js基于axios的封装,便于处理统一处理POAT,GET等请求参数,请求头,以及错误提示信息等。具体可以参考:和服务端进行交互 | vue-element-admin。或者https://github.com/PanJiaChen/vue-element-admin/blob/master/src/utils/request.js

//小demo说明
import axios from 'axios'  //导出一个axios的实例,并且这个实例要有请求拦截器,响应拦截器
const service = axios.create()      //创建一个axios的实例
service.interceptors.request.use()  //  请求拦截器
service.interceptors.response.use() // 响应拦截器
export default service  //导出axios实例

下面我们看index.js文件中的写法实例

import axios from "axios";
import { Message, Loading, MessageBox } from "element-ui";
import { apiUrl, getConterntUrl } from "../utils/util";
import { contentUrls } from "@/utils/contentApi.js"
// const baseCon = require("base/config");
var baseUrl = "",
    loading = Loading.service({
        lock: true,
        text: "加载中",
        spinner: "el-icon-loading",
        customClass: "loading-icon",
        background: "rgba(0, 0, 0, 0.8)",
    });
loading.close();
console.log('process.env.VUE_APP_CURENV', process.env.VUE_APP_CURENV);
switch (process.env.VUE_APP_CURENV) {
    case "development":
        baseUrl = ""
         "https://cloudhospital.taikang.com"
        break;
    case "test":
        baseUrl = "";
        break
    case "train": // 培训环境
        //https://cloudhospital.taikang.com/cloudhospital-train/
        baseUrl = "";
        break
    case "production":
        baseUrl = "https://tkih.mobile.taikang.com"; //生产环境url
        break;
    case "hainan":
        baseUrl = "https://ih.tkzhyl.com"; // 海南生产环境url
        break;
}

//  请求接口基础路径
axios.defaults.baseURL = baseUrl; //测试域名

axios.defaults.timeout = 200000;//请求超时

index.js文件请求拦截器中

axios.interceptors.request.use(
    (config) => {
	 if (config.url.indexOf('/tshomapp/pc/medical/getOrderChannelList') > -1 ||
            config.url.indexOf('/tshomapp/pc/medical/getWorkGroupList') > -1) {
            config.url = '/cloudhospital' + config.url; // 测试环境
            console.log(55555, config.url);

        } else if (contentUrls.includes(config.url) || contentUrls.includes(config.url.split('?')[0])) {
            config.url = getConterntUrl + config.url; // 测试环境
            console.log(44, config.url);

        } else {
            config.url = apiUrl + config.url; // 测试环境
        }
        return config;
    },
    (err) => {
        loading.close();
        Message({
            message: "请检查您的网络连接并重试",
            type: "warning",
            duration: 2000,
            customClass: "sucMsg",
            center: true,
        });
        return Promise.reject(err);
    }
})

index.js文件中响应拦截器

axios.interceptors.response.use(
    (res) => {
        loading.close();
        if (res.status == 200) {
            if (
                res.data.code == "5002" ||
                res.data.code == "BT5002" ||
                res.data.code == "BT5033" ||
                res.data.code == "BD2003"
            ) {
                MessageBox.alert(res.data.msg, "提示", {
                    confirmButtonText: "去登录",
                    type: "warning",
                }).then(() => {
                    sessionStorage.removeItem("token");
                    switch (process.env.VUE_APP_CURENV) {
                        case 'development':
                            window.location.href = "/";
                            break;
                        case 'test':
                            window.location.href = "/control-html/index.html#/";
                            break;
                        case 'train':
                            window.location.href = "/control-html-train/index.html#/";
                            break;
                        case 'production':
                            window.location.href = "/control-html/index.html#/";
                            break;
                    }

                });
            }
            return res.data;
        } else {
            Message({
                message: "请检查您的网络连接并重试",
                type: "warning",
                duration: 2000,
                customClass: "sucMsg",
                center: true,
            });
        }
    },
    (err) => {
        loading.close();
        Message({
            message: "请检查您的网络连接并重试",
            type: "warning",
            duration: 2000,
            customClass: "sucMsg",
            center: true,
        });
        return Promise.reject(err);
    }
);

最后index.js中export default axios;结尾

export default axios

下面就要关联API.js文件页面进行封装

import axios from "./index";
// import {getToken,getItem} from '@/utils/util'
export function api(url, method, request, other, header,responseType) {
  let headers = Object.assign({
    Authorization: "",
    token: ""
  },header);
  if (sessionStorage.getItem("token")) {
    // headers = {
    //    Authorization: "Bearer " + sessionStorage.getItem("token"),
    //    token: sessionStorage.getItem("token")
    //  }; 
      headers.Authorization = "Bearer " + sessionStorage.getItem("token");
      headers.token = sessionStorage.getItem("token");
    } else {
      delete headers.Authorization
      delete headers.token
    }
    if(request && request.isShare){
    // if(request && request.token){
      headers.Authorization = "Bearer " + request.token;
      headers.token = request.token;
    }
    console.log(5555,request);
    
  if (method == "post") {
    return axios({
      url: url,
      method: method,
      params: other ? other : "",
      data: request,
      headers:headers,
      responseType:responseType
    }).then((res) => {
      return res;
    });
  } else {
    return axios({
      url: url,
      method: "get",
      params: request,
      headers:headers,
      responseType:responseType
    }).then((res) => {
      return res;
    });
  }
}

xxx.vue文件中引用并调接口

<script>
import { api } from "@/api/API";
import axios from 'axios';
export default {
	data(){
	},
	mounted(){
		this.getConsultOf30DaysCode();
	},
	methods:{
	//调接口的方法
		getConsultOf30DaysCode(){
            let params = {
                "queryTime":this.reportDate,
                "serviceOrgId":JSON.parse(sessionStorage.getItem('currentOrg')).serviceCd
            }
            let response = api("/tshomapp/pc/medical/getConsultOf30Days", "post", params);
            response.then(res => {
                if(res.code == 0){
                    this.getConsultOf30DaysList = res.data;
                }
            })
        },
	}
}
</script>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue使用axios发送请求时,可以将请求接口进行封装,以提高代码的可维护性和复用性。 首先,在Vue项目中安装Axios库: ``` npm install axios --save ``` 然后,在需要使用请求接口的地方引入axios: ``` import axios from 'axios' ``` 接下来,我们可以创建一个名为api.js的文件,用于封装请求接口。在api.js中,我们可以定义各种请求接口的方法,例如: ``` import axios from 'axios' const baseUrl = 'http://api.example.com' //接口请求基础URL export const getUserInfo = (userId) => { return axios.get(baseUrl + '/user/' + userId) } export const postUserInfo = (userInfo) => { return axios.post(baseUrl + '/user', userInfo) } export const deleteUserInfo = (userId) => { return axios.delete(baseUrl + '/user/' + userId) } ``` 在上述代码中,我们定义了三个请求接口方法,分别是获取用户信息、提交用户信息和删除用户信息。 接下来,在需要使用接口的组件中引入这些接口方法: ``` import { getUserInfo, postUserInfo, deleteUserInfo } from './api.js' ``` 然后,在组件中可以直接使用这些封装好的接口方法发送请求,例如: ``` getUserInfo(123).then(response => { //处理请求成功后返回的数据 }).catch(error => { //处理请求失败的错误 }) const userInfo = { //用户信息数据 } postUserInfo(userInfo).then(response => { //处理请求成功后返回的数据 }).catch(error => { //处理请求失败的错误 }) deleteUserInfo(123).then(response => { //处理请求成功后返回的数据 }).catch(error => { //处理请求失败的错误 }) ``` 上述代码演示了如何使用封装好的接口方法发送请求,其中.then()方法处理请求成功后返回的数据,.catch()方法处理请求失败的错误。 通过封装接口方法,我们可以将复杂的请求逻辑隐藏在api.js文件中,使组件更加清晰和简洁,提高了项目的可维护性。同时,由于接口方法已经封装好,可以在其他组件中重复使用,提高了代码的复用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值