1.安装 axios 依赖npm i axios -S
2. 在项目src目录下新建utils文件夹,然后再新建 request.js文件,文件主要是写axios的封装过程// 导入axiosimport axios from 'axios'import QS from 'qs';import {ElMessageBox,ElMessage} from 'element-plus'import {showLoading,hideLoading } from '../utils/loading.js'//1. 创建新的axios实例,const service = axios.create({ // 公共接口--这里注意后面会讲 baseURL: '/api', // 超时时间 单位是ms,这里设置了3s的超时时间 timeout: 300})// 2.请求拦截器service.interceptors.request.use(config => { showLoading(); //发请求前做的一些处理,数据转化,配置请求头,设置token,设置loading等,根据需求去添加 config.data = JSON.stringify(config.data); //数据转化,也可以使用qs转换 config.headers = { 'Content-Type': 'application/json' //配置请求头 } //如有需要:注意使用token的时候需要引入cookie方法或者用本地localStorage等方法,推荐js-cookie //const token = getCookie('名称');//这里取token之前,你肯定需要先拿到token,存一下 //if(token){ //config.params = {'token':token} //如果要求携带在参数中 //config.headers.token= token; //如果要求携带在请求头中 //} return config}, error => { Promise.reject(error)})// 3.响应拦截器service.interceptors.response.use(response => { //接收到响应数据并成功后的一些共有的处理,关闭loading等 setTimeout(() => { hideLoading() }, 200) return response}, error => { /***** 接收到异常响应的处理开始 *****/ if (error && error.response) { // 1.公共错误处理 // 2.根据响应码具体处理 switch (error.response.status) { case 400: error.message = '错误请求' break; case 401: error.message = '未授权,请重新登录' break; case 403: error.message = '拒绝访问' break; case 404: error.message = '请求错误,未找到该资源' window.location.href = "/NotFound" break; case 405: error.message = '请求方法未允许' break; case 408: error.message = '请求超时' break; case 500: error.message = '服务器端出错' break; case 501: error.message = '网络未实现' break; case 502: error.message = '网络错误' break; case 503: error.message = '服务不可用' break; case 504: error.message = '网络超时' break; case 505: error.message = 'http版本不支持该请求' break; default: error.message = `连接错误${error.response.status}` } } else { // 超时处理 if (JSON.stringify(error).includes('timeout')) { Message.error('服务器响应超时,请刷新当前页') } error.message = '连接服务器失败' } ElMessage.error(error.message); //如果不需要错误处理,以上的处理过程都可省略 return Promise.resolve(error.response)})//4.导入文件export default service
3.在axios 封装的这个文件中 request.js,你会看到有一下内容具体使用 可点击 查看一下 链接 https://www.jianshu.com/p/f082ad66a86d
- 引入element-plus 这个位置使用主要是用与弹窗提示
具体全局使用element 安装依赖可点击查看一下链接 https://www.jianshu.com/p/8ca4978e0635
2.utils/loading.js 封装element loading 动画 在 utils下新建一个loading.js
/** * 全局loading效果:合并多次loading请求,避免重复请求 * 当调一次showLoading,则次数+1;当次数为0时,则显示loading * 当调一次hideLoading,则次数-1; 当次数为0时,则结束loading */import { ElLoading } from 'element-plus';// 定义一个请求次数的变量,用来记录当前页面总共请求的次数let loadingRequestCount = 0;// 初始化loadinglet loadingInstance;// 编写一个显示loading的函数并且记录请求次数 ++const showLoading = (target) => { if (loadingRequestCount === 0) { // element的服务方式 target 我这边取的是表格class // 类似整个表格loading和在表格配置v-loading一样的效果,这么做是全局实现了,不用每个页面单独去v-loading loadingInstance = ElLoading.service({ target }); } loadingRequestCount++}// 编写一个隐藏loading的函数,并且记录请求次数 --const hideLoading = () => { if (loadingRequestCount <= 0) return loadingRequestCount-- if (loadingRequestCount === 0) { loadingInstance.close(); } } export { showLoading, hideLoading }
4.在util下 新建一个http.js文件主要是写几种请求的封装过程/**** http.js ****/// 导入封装好的axios实例import request from './request'const http ={ /** * methods: 请求 * @param url 请求地址 * @param params 请求参数 */ get(url,params){ const config = { method: 'get', url:url } if(params) config.params = params return request(config) }, post(url,params){ const config = { method: 'post', url:url } if(params) config.data = params return request(config) }, put(url,params){ const config = { method: 'put', url:url } if(params) config.params = params return request(config) }, delete(url,params){ const config = { method: 'delete', url:url } if(params) config.params = params return request(config) }}//导出export default http
5 .在项目src目录下新建api文件夹,然后在其中新建index.js文件,这个文件是主要书写API的封装过程。import http from '../utils/http'// get请求export function getData(params){ return http.post(`/index.php/Index/Zhijiao/getOnetitle`,params)}
import http from '../utils/http'/** * @parms resquest 请求地址 例如:http://197.82.15.15:8088/request/... * @param '/testIp'代表vue-cil中config,index.js中配置的代理 */// let resquest = "/testIp/request/"//get请求export function getData(params){ return http.get(`${resquest}/postForm.json`,params)}//post请求export function postFormAPI(params){ return http.post(`${resquest}/postForm.json`,params)}// put 请求export function putSomeAPI(params){ return http.put(`${resquest}/putSome.json`,params)}// delete 请求export function deleteListAPI(params){ return http.delete(`${resquest}/deleteList.json`,params)}
6.在**.vue中调用 请求
.7这时请求接口 你会发现有跨域问题,这时需要在vite.config.js 配置 域名代理devServer: { port: 8080, //本机端口号 host: "localhost", //本机主机名 https: false, //协议 open: true, //启动服务器时自动打开浏览器访问 proxy: { '/api': { target: "*****",//代理域名 changOrigin: true, //开启代理 pathRewrite: { '^/api': '' } } } },
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |