当前位置:   article > 正文

vue请求的封装_vue封装请求

vue封装请求

首先是对于请求的拦截和处理,我一般是在utils里建立js进行封装

Servise.js

  1. import axios from 'axios'
  2. import router from '../router'
  3. import { Message, Loading } from 'element-ui'
  4. import { Base64 } from 'js-base64';
  5. import AES from '../static/AES.js'
  6. import md5 from 'js-md5';
  7. // export const ConfigBaseURL = 'http://请求头' //默认路径,这里也可以使用env来判断环境
  8. let loadingInstance = null //这里是loading
  9. //使用create方法创建axios实例
  10. export const Service = axios.create({
  11. timeout: 30000, // 请求超时时间
  12. method: 'post',
  13. headers: {
  14. 'Content-Type': 'application/json;charset=UTF-8'
  15. }
  16. })
  17. // request拦截器
  18. Service.interceptors.request.use(
  19. config => {
  20. loadingInstance = Loading.service({
  21. lock: true,
  22. text: 'loading...',
  23. background:'transparent'
  24. })
  25. if (sessionStorage.getItem('token')) {
  26. config.headers['X-Access-Token'] = sessionStorage.getItem('token') // 让每个请求携带自定义token 请根据实际情况自行修改
  27. }
  28. if(config.data){
  29. config.headers['M-RAND'] = new Date().toLocaleString();
  30. config.headers['M-SIGN'] = md5(config.headers['M-RAND']+"简单字符串"+Base64.encode(JSON.stringify(config.data))).toUpperCase();
  31. }
  32. return config;
  33. },
  34. error => {
  35. // 请求错误处理
  36. return Promise.reject(error);
  37. }
  38. )
  39. var lateFlag = 0;
  40. // 添加响应拦截器
  41. Service.interceptors.response.use(response => {
  42. loadingInstance.close()
  43. response.data = Base64.decode(response.data);
  44. response.data = response.data.split('').reverse().join('');
  45. if (response.data.length > 24) {
  46. let rand = response.data.substring(8, 24);
  47. response.data = response.data.substring(0, 8) + response.data.substring(24);
  48. return JSON.parse(AES.myDecrypt(response.data, rand));
  49. } else {
  50. let rand = response.data.substring(response.data.length - 16);
  51. response.data = response.data.substring(0, response.data.length - 16);
  52. return JSON.parse(AES.myDecrypt(response.data, rand));
  53. }
  54. // return response.data
  55. }, error => {
  56. console.log('error',error);
  57. if (error.response.status == 504 || error.response.status == 404) {
  58. Message.error({message: '数据获取异常'});
  59. } else if (error.response.status == 403) {
  60. Message.error({message: '权限不足,请联系管理员!'});
  61. } else if (error.response.status == 401) {
  62. lateFlag++;
  63. if(lateFlag==1){
  64. // this.$confirm('Token失效,请重新登录','',{
  65. // confirmButtonText:'确定',
  66. // cancelButtonText:'取消',
  67. // }).then(res=>{
  68. // console.log('点击了确定');
  69. // }).catch(res=>{
  70. // console.log('点击了取消');
  71. // })
  72. Message.error({message: 'Token失效,请重新登录'});
  73. }
  74. router.replace('/');
  75. } else {
  76. if (error.message) {
  77. Message.error({message: error.message});
  78. } else {
  79. Message.error({message: '未知错误!'});
  80. }
  81. }
  82. loadingInstance.close()
  83. return Promise.reject(error)
  84. })

然后就可以封装一些简单的请求

request.js

  1. import {Service} from './Service'
  2. export function getAction(url,data) {
  3. return Service({
  4. url: url,
  5. method: 'get',
  6. params:data
  7. })
  8. }
  9. export function postAction(url,data) {
  10. return Service({
  11. url: url,
  12. method:'post',
  13. data: data
  14. })
  15. }
  16. export function deleteAction(url,data) {
  17. return Service({
  18. url: url,
  19. method:'delete',
  20. params: data
  21. })
  22. }

在main.js绑定即可使用

  1. import { Service } from './utils/Service.js'
  2. import { Base64 } from 'js-base64';
  3. Vue.prototype.$Base64 = Base64
  4. import { getAction, postAction,deleteAction } from './utils/request.js'
  5. Vue.prototype.$request = Service
  6. Vue.prototype.$getAction = getAction
  7. Vue.prototype.$postAction = postAction
  8. Vue.prototype.$deleteAction = deleteAction

在页面使用时建议使用异步封装调用

  1. //请求函数
  2. getlist() {
  3. return new Promise((resolve, reject) => {
  4. this.$postAction("请求地址", {sex:0}).then((res) => {
  5. if (res.success) {
  6. resolve(res.result.data)
  7. }
  8. });
  9. })
  10. },
  11. //使用调用函数
  12. setdata() {
  13. this.getAnalysis().then(res => {
  14. console.log(res)
  15. })

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/227687
推荐阅读
相关标签
  

闽ICP备14008679号