Vue 网络请求http的封装调用

网络请求的封装方法图例:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import axios from 'axios';// 引入axios  

//环境切换   
axios.defaults.baseURL = 'http://10.*.183.25:2023*/' 

// 请求超时 请求头 10s
// axios.defaults.timeout = 30000
axios.defaults.headers.post['Content-Type'] = 'application/JSON';
// 请求拦截器
axios.interceptors.request.use(
    config => {
        // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
        // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
        let user = sessionStorage.getItem("user");
        if (user != null) {
            let usertoken = JSON.parse(sessionStorage.getItem("user"));
            config.headers.Authorization = usertoken.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:
                    console.log("未登录")
                    break;
                case 403:
                    console.log("登录过期,请重新登录")
                    break;
                // 404请求不存在                
                case 404:
                    console.log("地址不存在")
                    break;
                // 其他错误,直接抛出错误提示                
                default:
                    console.log('其他错误', error.response.data.message)
            }
            return Promise.reject(error.response);
        }
    }
);

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

/**
 * put 请求
 * @param  url 
 * @param  params 
 */
export function put(url, params) {
    return new Promise((resolve, reject) => {
        axios.put(url, params)
            .then(response => {
                resolve(response.data);
            }, err => {
                reject(err)
            })
    })
}

创建统一的接口名称调用
在这里插入图片描述
在这里插入图片描述

// 刚刚封装的axios 
import { post } from './axios';

// users接口   
export const login = params => post('/system/login', params);//登录
/**
 * 
 * @param {用户管理} params 
 */
export const syslist = params => post('/sys/user/list', params);//用户管理【用户列表】
export const resetpassword = params => post('/sys/user/resetpassword', params);//用户管理【重置密码】  
export const deleteuser = params => post('/sys/user/delete', params);//用户管理【删除用户】  
export const Adduser = params => post('/sys/user/add ', params);//用户管理【添加用户】  
export const checkusername = params => post('/sys/user/checkusername', params);//用户管理【验证用户名是否已存在】  
export const findbyid = params => post('/sys/user/findbyid', params);//用户管理【根据id查询用户】    
export const update = params => post('/sys/user/update', params);//用户管理【修改用户信息】    
export const updatepassword = params => post('/sys/user/updatepassword', params);//用户管理【修改用户信息】    
/**
 *  @param {角色管理} params 
 */
export const listall = params => post('/sys/role/listall', params);//角色管理【角色列表】    
export const roleadd = params => post('/sys/role/add ', params);//角色管理【添加角色】     
export const roledelete = params => post('/sys/role/delete ', params);//角色管理【删除角色】      
export const rolefindbyid = params => post('/sys/role/findbyid ', params);//角色管理【根据id查询角色】       
export const roleupdate = params => post('/sys/role/update', params);//角色管理【更新角色】       
export const grantrole = params => post('/sys/role/grantrole', params);//角色管理【给用户设置角色】       
export const updatemenus = params => post('/sys/menu/updatemenus', params);//角色管理【设置角色的权限信息】           
export const rolemenus = params => post('/sys/menu/menus', params);//角色管理【设置角色的权限信息】           

/**
 *  @param {菜单管理} params 
 */
export const listpage = params => post('/sys/menu/listpage', params);//菜单管理【菜单列表】    
export const treelist = params => post('/sys/menu/treelist', params);//菜单管理【查询菜单权限树】    
export const menuadd = params => post('/sys/menu/add', params);//菜单管理【添加菜单】     
export const menudel = params => post('/sys/menu/del', params);//菜单管理【删除菜单】      
export const menuupdate = params => post('/sys/menu/update', params);//菜单管理【更新菜单】        
export const menufindbyid = params => post('/sys/menu/findbyid', params);//菜单管理【根据id获取菜单】         
export const magictrue = params => post('/digitaltwin/magic/true', params);//孪生模拟 模拟数据
export const magicfalse = params => post('/digitaltwin/magic/false', params);//孪生模拟 真实数据
export const magic = params => post('/digitaltwin/magic', params);//孪生模拟 查看当前状态
export const restart = params => post('/base/restart', params);//孪生模拟 重启后台服务
export const SZLSstatus = params => post('/base/status', params);//孪生模拟 查询后台服务器状态

在页面中的调用

在这里插入图片描述

<template>
  <div class="Userbox">
    <el-button type="primary" @click="magicbtn">查看状态</el-button>
    <el-button type="warning" @click="magictruebtn">模拟数据</el-button>
    <el-button type="success" @click="magicfalsebtn">真实数据</el-button>
    <br />
    <br />

    <h1>当前数据状态:{{ type }}</h1>
    <br />  
    <el-button type="primary" @click="statusfunc">查询后台服务器状态</el-button>
    <el-button type="danger" @click="Restartfunc">重启后台服务</el-button> 
    <br />
    <h2>服务器当前状态:{{ statusok }}</h2>
  </div>
</template>

<script>
import { magictrue, magicfalse, magic, restart, SZLSstatus } from "@/utils/api";
export default {
  data() {
    return {
      type: "",
      statusok: "",
    };
  },
  mounted() {
    this.magicbtn();
    this.statusfunc();
  },
  methods: {
    //模拟数据
    magictruebtn() {
      magictrue({}).then((res) => {
        alert("模拟数据,30秒以后数字孪生数据汇总即将生效");
        this.magicbtn();
      });
    },
    // 真实数据
    magicfalsebtn() {
      magicfalse({}).then((res) => {
        alert("真实数据,30秒以后数字孪生数据汇总即将生效");
        this.magicbtn();
      });
    },
    //查看状态
    magicbtn() {
      magic({}).then((res) => {
        if (res.data) {
          this.type = "【当前为模拟数据】";
        } else {
          this.type = "【当前为真实数据】";
        }
      });
    },
    //重启UE5数字孪生后台服务
    Restartfunc() {
      restart({}).then((res) => {
        alert("后台服务已重启");
      });
    },
    //查看后台服务器的状态
    statusfunc() {
      SZLSstatus({}).then((res) => {
        if (res.data == "active") {
          this.statusok = "运行中";
          alert("运行中");
        } else if (res.data == "activating") {
          this.statusok = "启动中";
          alert("启动中");
        } else if (res.data == "failed") {
          this.statusok = "已停止";
          alert("已停止");
        }
      });
    },
  },
};
</script>

<style>
.stared {
  color: red;
}

.stacolor {
  color: #409eff;
}

.Hemobox {
  width: 100%;
  height: auto;
  position: relative;
}

.Usersuo {
  width: 100%;
  height: auto;
  position: relative;
  background: #ffffff;
  padding: 20px;
  padding-bottom: 1px;
  margin-bottom: 20px;
  box-sizing: border-box;
}

.Tablebox {
  width: 100%;
  height: auto;
  position: relative;
  background: #ffffff;
  padding: 20px;
  padding-bottom: 1px;
  margin-bottom: 50px;
  box-sizing: border-box;
}

.Table_a {
  color: #ffffff;
  text-decoration: none;
}
</style>

到此,一个简单的http网络请求封装结束

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值