vue项目请求封装;axios封装使用

vue项目,封装axios请求方式和响应状态码;以及接口的api封装;

目录结构:
在这里插入图片描述
1.具体在src/utils/request.js下封装axios:
①引入axios和router
②引入element-ui是为了用提示组件 和加载组件(可选择去掉)
③根据请求拦截器的config配置请求头
④根据响应拦截器的不同状态码做不同处理(状态码需要自己根据项目修改)
简单的request.js封装点击这里,没有封装状态码和提示–可自己配

import axios from "axios";
import router from "./../router";
import { Message, Loading, MessageBox } from "element-ui";// 设置axios全局默认的BASE-URL, 只要设置了全局的默认base_url,以后的请求会自动拼接上base_url
// -------------------------------注意改成自己的公共url------------------------------------
axios.defaults.baseURL = "http://192.168.1.194/gateway";
axios.defaults.timeout = 10000;let loading;// 配置axios的请求拦截器-(每次在请求头上携带后台分配的token-后台判断token是否有效等问题)
axios.interceptors.request.use(config => {// 在发送请求之前做些什么// console.log('请求到了哟', config.headers.Authorization)// 如果有其他的特殊配置 只需要判断config参数 设置即可let showLoading = true;if (config.loading === false) {showLoading = false;}if (showLoading) {loading = Loading.service({text: "加载中...",spinner: "el-icon-loading",background: "rgba(0, 0, 0, 0.08)"});}// 标识系统为AJAX请求config.headers["X-Requested-With"] = "XMLHttpRequest";// 统一的给config设置 token-------------------------------注意获取方法------------------------------------//   config.headers.Authorization = JSON.parse(localStorage.getItem('token'))config.headers["Token"] = "97aa8f6b569648c78005240033aa0438";return config;},error => {// 对请求错误做些什么return Promise.reject(error);}
);// 响应拦截器 与后端定义状态是100时候是错误 跳转到登录界面
axios.interceptors.response.use(response => {// 成功status:200 对响应数据做点什么console.log("接口success", response);loading && loading.close();// 根据接口返回状态码 定义const { code, data, message } = response.data;if (code) {switch (code) {case 200:return { code, data };case 3012:return { code, data };case 404:Message({message: "网络请求不存在",type: "error",duration: 2 * 1000});return Promise.reject({ code, data });case 100:localStorage.removeItem("token");router.push({path: "/login",querry: {} // 登录过期 回到登录页});return Promise.reject({ code, data });case 4011:Message.closeAll();MessageBox.alert("登录超时或身份失效,请重新登录!", "警告", {customClass: "alertbox",confirmButtonText: "确定",type: "warning",center: true,callback: action => {// location.reload()router.push("/");}});return Promise.reject({ code, data });case 4002:default:Message({message: message || "Error",type: "error",duration: 5 * 1000});return Promise.reject({ code, data });}}//   return response.data},error => {loading && loading.close();console.log("接口error", error, error.response);const { status } = error.response;switch (status) {case 500:Message.closeAll();Message({message: "请求超时",type: "error",duration: 3 * 1000});break;case 700:Message.closeAll();Message({message: "网络中断",type: "error",duration: 3 * 1000});break;default:Message({message: error.message,type: "error",duration: 3 * 1000});}// 对响应错误做点什么return Promise.reject(error);}
);const $http = {};$http.get = function(url, data, config) {//  这一步把api方法里的  地址 参数 配置传入进来 配置到config 然后调用上面封装的axiosconfig = config || {};config.url = url;config.method = "get";config.params = data;return axios.request(config);
};$http.delete = function(url, data, config) {config = config || {};config.url = url;config.method = "delete";config.params = data;return axios.request(config);
};$http.post = function(url, data, config) {config = config || {};config.url = url;config.method = "post";config.data = data;return axios.request(config);
};$http.put = function(url, data, config) {config = config || {};config.url = url;config.method = "put";config.data = data;return axios.request(config);
};export { axios, $http };

2.接口方法封装 src/api/way.js:
①引入封装的$http

②使用$http.get(url,data,config) ; 下方的函数方法都是可以接受三个参数的 分别是 地址 参数 配置 三个参数可以由组件内使用的函数function传入

③在组件内使用,接受传递的参数和配置(详见test.vue组件内的方法)

以下get post put delete 请求均有;且对于不同的请求需要配置的config也有

import { $http } from '@/utils/request'// $http.get(url,data,config)
// 下方的函数方法都是可以接受三个参数的 分别是 地址 参数 配置   三个参数可以由函数function传入// 获取详情
export function getlist() {return $http.get(`main/queTactic/list`)
}
// 获取班级列表
export function getClass(teacherId) {return $http.get(`/basis/teacher/queryTeacherClass/${teacherId}`)
}
// 获取学科网url
export function getUrl() {return $http.post(`/auth/api/authorize`)
}
// 获取知识点
export function getKnowledgeIdByChapterIds(data) {return $http.post(`/question/message/getKnowledgeIdByChapterIds`, data)
}
// 修改出题策略
export function editTactics(data) {return $http.put('main/queTactic', data)
}
// 个性化组题删除题
export function indiviDelete(data) {return $http.delete(`/main/personal/deleteQuestionPersonalJob`, data)
}
// 特殊的传参---------例如  文件流下载 需要设置配置responseType  否则下载的文件打开不了-----------
export function downloadExcel(examId) {return $http.get(`main/statistics/report/${examId}/export/questionExcel`, null, { responseType: 'blob' })
// 下方请求也可以 但是需要最上方import引入之前封装的axios
//   return axios.request({
//     url: `main/statistics/report/${examId}/export/questionExcel`,
//     responseType: 'blob',
//     method: 'get'
//   })
}

3.scr/views/test.vue在组件内使用接口方法:
①引入way.js内的接口方法:
②传递参数
③通过.then()获取使用

<template><div>接口返回参数<div>{{ data }}</div><!-- <el-input v-model="input" placeholder="请输入内容" /> --><button @click="getlistRequest">get 获取列表</button><button @click="getClassRequest">get动态参数 获取班级</button><button @click="btnRequest">post点击获取url</button><button @click="getKnowledgeRequest">post传参获取知识点</button><button @click="downloadExcelRequest">get文件流下载  配置config</button></div>
</template><script>
//  引入接口方法
import { getlist, getUrl, getClass, getKnowledgeIdByChapterIds, downloadExcel } from '@/api/way.js'
export default {data() {return {input: '',data: null}},methods: {getlistRequest() {getlist().then(res => {console.log(res.data)this.data = res.data})},getClassRequest() {const data = 1932115674972160getClass(data).then(res => {console.log(res.data)this.data = res.data})},btnRequest() {getUrl().then(res => { this.data = res.data })},getKnowledgeRequest() {const data = {chapterIds: [22394],schoolId: 39}getKnowledgeIdByChapterIds(data).then(res => {console.log(res.data)this.data = res.data})},downloadExcelRequest() {const data = 1943647285534911downloadExcel(data).then(res => {const type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'const blob = new Blob([res])const url = window.URL.createObjectURL(blob, { type: type })const a = document.createElement('a')a.href = urldocument.body.appendChild(a)a.download = '学情报告.xlsx'a.click()window.URL.revokeObjectURL(blob)a.remove()})}}
}
</script><style>
</style>

4.页面和接口展示:
成功200:
在这里插入图片描述
需要配置config的下载:
在这里插入图片描述

请求失败提示:在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

顺序查找(Sequential Search)

1、定义 顺序查找又叫线性查找&#xff0c;是最基本的查找技术。 2、基本思想 从表的一端开始&#xff08;第一个或最后一个记录&#xff09;&#xff0c;顺序扫描线性表&#xff0c;依次将扫描到的结点关键宇和给定值K相比较。若当前扫描到的结点关键字与K相等&#xff0c;则查…

MyBatis MapperScannerConfigurer配置——MyBatis学习笔记之八

在上一篇博文的示例中&#xff0c;我们在beans.xml中配置了studentMapper和teacherMapper&#xff0c;供我们需要时使用。但如果需要用到的映射器较多的话&#xff0c;采用这种配置方式就显得很低效。为了解决这个问题&#xff0c;我们可以使用MapperScannerConfigurer&#xf…

本地如何搭建IPv6环境测试你的APP

IPv6的简介 IPv4 和 IPv6的区别就是 IP 地址前者是 .&#xff08;dot&#xff09;分割&#xff0c;后者是以 :&#xff08;冒号&#xff09;分割的&#xff08;更多详细信息自行搜索&#xff09;。 PS&#xff1a;在使用 IPv6 的热点时候&#xff0c;记得手机开 飞行模式 哦&am…

“Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported“解决方法

项目接口返回 code: 500 data: null message: “Content type ‘application/x-www-form-urlencoded;charsetUTF-8’ not supported” 原因在于&#xff0c;接口不支持application/x-www-form-urlencoded;charsetUTF-8 通过看swagger的接口传递数据类型来修改&#xff0c; 将…

新建第一个windows服务(Windows Service)

首先&#xff0c;请原谅我是一个小白&#xff0c;一直到前段时间才在工作需要的情况下写了第一个windows服务。首先说一下为什么写这个windows服务吧&#xff0c;也就是什么需求要我来写这么一个东西。公司的项目中&#xff0c;需要一个预警功能&#xff08;从数据库里取出需要…

Windows PowerShell安装指定版本vue/cli脚手架失效解决办法;vue : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue

mac搭建vue项目看这篇 打开shift——鼠标右键&#xff0c;就可以打开Windows PowerShell 1.安装vue/cli npm install -g vue/cli3.12.0 后面是版本号 2.安装完成后查看 使用过 vue -V 查看vue/cli版本号 &#xff08;如果查看找不到版本&#xff0c;使用命令行创建项目vue …

uni.request接口封装;小程序uni-app接口封装

另一篇请求接口简单封装在api下的index.js 本片资源下载地址 本片封装了post get put请求&#xff0c;重点在request.js文件 1.新增四个文件 2.根目录下的utils下的request.js封装uni.request()请求 注意 &#xff1a;需要根据自己接口的 statusCode 状态码 、数据状态码…

php 功能函数集

1.获取页面闭合带id标签数据 View Code 1 <?php2 header("Content-type: text/html; charsetutf-8"); 3 /**4 * $tag_id HTML tag_id like id"abc"5 * $url web url6 * $tag HTML tag7 * $data HTML data if…

git 配置免密登陆

SSH免密码登录配置 注意&#xff1a;这些命令需要在git bash here中敲 注意先配置好账户名和邮箱 # git config user.name zhangsan # git config user.email zhangsanqq.com # 使用–global参数&#xff0c;配置全局的用户名和邮箱&#xff0c;只需要配置一次即可。推荐配置…

ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL

ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL 引言--- 在现今搜索引擎制霸天下的时代&#xff0c;我们不得不做一些东西来讨好爬虫&#xff0c;进而提示网站的排名来博得一个看得过去的流量。 URL重写与优化就是搜索引擎优化的手段之一。 假如某手机网站(基于AS…

MS SQLSERVER 各种乱七八糟

2019独角兽企业重金招聘Python工程师标准>>> 这个是看完了sql语法的一点个人练手&#xff0c;没什么价值&#xff0c;权且当做记录 select employee_id,dept_code,last_name,manager_id from l_employees where last_name like %e%--%代表任意字符串 order by dept_…

[C++11 std::thread] 使用C++11 编写 Linux 多线程程序

From: http://www.ibm.com/developerworks/cn/linux/1412_zhupx_thread/index.html 本文讲述了如何使用 C11 编写 Linux 下的多线程程序&#xff0c;如何使用锁&#xff0c;以及相关的注意事项&#xff0c;还简述了 C11 引入的一些高级概念如 promise/future 等。 前言 在这个…

div 背景图 居中

这里主要是 background-position: center;属性很给力 div{width: 100%;height: 100%;background-image: url(../../../assets/initialize.png);background-repeat: no-repeat;background-size:70px 70px;background-position: center;}

CCNA知识总结(一)

什么是路由&#xff1a; 路由就是为了形成“FIB”。 在路由器上分为2大类&#xff1a; 1&#xff09; Coutrol Plane 控制平面就是&#xff1a;“路由协议”&#xff0c;就是为了2个设备之间的交互来形成“FIB”。 2&#xff09; Data Plane 数据平面就是&#xff1a;“Forw…

记录uni-app弹框事件无生命周期问题;uni-popup-dialog打开触发事件;uni-popup-dialog调用接口时机

项目需求&#xff1a;点击页面的 品牌型号 按钮&#xff0c;打开弹框&#xff0c;将 车架号码 参数传入接口获取到对应的 品牌型号列表&#xff0c;在进行选择后关闭弹框。 实际开发中&#xff0c;我在父组件里面引入了弹框子组件&#xff1b;诡异的事情发生了&#xff1a; 在…

最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)

From: http://www.cnblogs.com/lanxuezaipiao/p/3703988.html 导读 1. 什么是序列化&#xff1f; 2. 为什么要序列化&#xff1f;好处在哪里&#xff1f; 3. C对象序列化的四种方法 4. 最常用的两种序列化方案使用心得 正文 1. 什么是序列化&#xff1f; 程序员在编写应用程序…

SCCM 2012系列16 操作系统播发⑤

添加了操作系统映像&#xff0c;也创建了任务序列&#xff0c;那么我们改对创建的任务序列编辑一下了&#xff0c;以满足我们播发下去系统的要求是我们想要的&#xff0c;比如分区是怎么样的&#xff0c;当然分区不是固化的&#xff0c;是按照百分比来进行划分的&#xff0c;详…

vue旋转图片功能,旋转放大图片功能;vue旋转放大div元素

需求&#xff1a;可以旋转、放大、颠倒图片。 html: <div class"imgtop"><img class"imgboxele" id"xingshizhengzhengben" :src"imgurl" alt""></div><div class"imgtxt">行驶证正本<…

xp和win7安装telnet服务

xp&#xff1a; 有些ghost版本的xp会精简掉telnet服务 首先telnet服务需要的几个文件&#xff1a; tlntadmn.exe tlntsess.exe tlntsvr.exe tlntsvrp.dll 文件分享&#xff1a;https://yunpan.cn/cSaaaXjUrKFHu 访问密码 719d 将以上几个文件拷贝到c:\windows\system32下&…

linux centos7.2 nodeJs全局安装

先下载nodeJS 选一个linux版本的http://nodejs.cn/download/ 下载下来得到个node-v8.12.0-linux-x64.tar.xz这样的文件 用xftp上传到服务器你想安装的目录 xftp破解版链接:http://www.xue51.com/soft/1456.html xshell破解版链接:http://www.cncrk.com/downinfo/219821.html …