设为首页收藏本站

安徽论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12274|回复: 0

vue 请求拦截器的配置方法详解

[复制链接]

85

主题

0

回帖

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2022-3-26 10:59:25 | 显示全部楼层 |阅读模式
网站内容均来自网络,本站只提供信息平台,如有侵权请联系删除,谢谢!
按如下步骤进行
1.
  1. request.js
复制代码
内容:http request请求拦截器和http response服务器响应拦截器配置
2.
  1. http.js
复制代码
内容:请求数据方式封装
3.
  1. utils.js
复制代码
内容:获取token,判断token是否存在
4.
  1. store
复制代码
文件:
vuex 仓库配置

  • vuex 持久化
  • vuex 模板引用
5.接口的封装
目录

request.js内容
  1. http request
复制代码
请求拦截器和
  1. http response
复制代码
服务器响应拦截器配置
  1. // http request 请求拦截器,有token值则配置上token值
  2. import axios from 'axios'
  3. import Promise from 'promise'
  4. import util from './utils';
  5. import store from './../store/index';
  6. const service = axios.create({
  7.     timeout: 60000, // 请求超时时间
  8.     headers: {
  9.         // Authorization: Authorization,
  10.         'Content-Type': 'application/json;charset=UTF-8'
  11.     }
  12. });
  13. // http请求拦截器
  14. service.interceptors.request.use(
  15.     config => {
  16.         let tokenExist = util.tokenExist();
  17.         if (tokenExist) {
  18.             // bus.$emit('toggleloading', true)//显示loading
  19.             //如果token存在
  20.             config.headers['Authorization'] = `Bearer ${util.getToken()}`;
  21.         }
  22.         // Toast.loading({
  23.         //     message: '加载中...',
  24.         //     duration: 0,
  25.         //     forbidClick: true
  26.         // });
  27.         return config;
  28.     },
  29.     error => {
  30.         Promise.reject(error);
  31.     }
  32. )
  33. // http response 服务器响应拦截器,
  34. // 这里拦截401错误,并重新跳入登页重新获取token
  35. service.interceptors.response.use(
  36.     response => {
  37.         if (response.status === 200) {
  38.             //通讯成功
  39.             // Toast.clear();
  40.             /*************
  41.              * response.data.status === 0 错误
  42.              * response.data.status === 100 成功
  43.              * response.data.status === 401 token过期
  44.              *
  45.              * *************/
  46.             // bus.$emit('toggleloading', false)//隐藏loading
  47.             if (response.data.state === 401) {
  48.                 //如果是token过期,跳转至登录
  49.                 Message.error("登录已过期,请重新登录!");
  50.                 store.commit('SET_TOKEN', '');
  51.                 util.goLogin();
  52.             } else if (response.data.state === 0) {
  53.                 // Message.error(response.data.message);
  54.                 return response.data;
  55.             } else {
  56.                 return response.data;
  57.             }
  58.         }
  59.     },
  60.     error => {
  61.         //请求失败
  62.         // ;
  63.         const response = error.response;
  64.         if (response.status === 401) {
  65.             // Toast.fail(response.data.message);
  66.             Message.error("登录已过期,请重新登录!");
  67.             util.goLogin();
  68.         } else if (response.status === 403) {
  69.             $router.push({
  70.                 name: '403'
  71.             });
  72.         } else {
  73.             // Toast.fail(response.data.message ? response.data.message : '系统错误请联系管理员');
  74.             // Message.error({
  75.             //     message: '无服务,请联系管理员'
  76.             // });
  77.         }
  78.         return Promise.reject(error);
  79.     }
  80. );
  81. export default service;
复制代码
http.js内容
请求数据方式
  1. import request from './request';
  2. // import store from './../store/index';
  3. const http = {
  4.     request(config) {
  5.         request(config);
  6.     },
  7.     post(url, data) {
  8.         // if(data instanceof Object){
  9.         // }else{
  10.         //     data = {
  11.         //         ...data
  12.         //     };
  13.         // }
  14.         return request({
  15.             url,
  16.             method: 'post',
  17.             data
  18.         });
  19.     },
  20.     postFile(url, data, contentType) {
  21.         return request({
  22.             url,
  23.             method: 'post',
  24.             data,
  25.             contentType
  26.         });
  27.     },
  28.     get(url, params) {
  29.         return request({
  30.             url,
  31.             method: 'get',
  32.             params
  33.         });
  34.     },
  35.     put(url, data) {
  36.         return request({
  37.             url,
  38.             method: 'put',
  39.             data
  40.         });
  41.     },
  42.     delete(url) {
  43.         return request({
  44.             url,
  45.             method: 'delete'
  46.         });
  47.     },
  48.     download(url, params) {
  49.         return request({
  50.             url,
  51.             method: 'get',
  52.             params,
  53.             responseType: 'blob'
  54.         });
  55.     },
  56.     downloadPost(url, data) {
  57.         return request({
  58.             url,
  59.             method: 'post',
  60.             data,
  61.             responseType: 'blob'
  62.         });
  63.     }
  64. };
  65. export default http;
复制代码
utils.js内容
获取token,判断token是否存在
  1. import store from '../store/index';
  2. let util = {
  3.     //获取token
  4.     getToken() {
  5.         return store.getters.token;
  6.     },
  7.     //判断token是否存在
  8.     tokenExist() {
  9.         let flag;
  10.         let token = store.getters.token;
  11.         if (token && token !== '') {
  12.             flag = true;
  13.         } else {
  14.             flag = false;
  15.         }
  16.         return token;
  17.     },
  18. }
  19. export default util
复制代码

vuex 仓库配置

  • vuex 持久化
  • vuex 模板引用
index.js内容
  1. import Vue from "vue"
  2. import Vuex from "vuex"
  3. import VuexPersistence from 'vuex-persist';
  4. import db from './db'
  5. Vue.use(Vuex)
  6. //vuex 状态持久化
  7. const vuexLocal = new VuexPersistence({
  8.     storage:window.localStorage
  9. })
  10. const store = new Vuex.Store({
  11.     state:{},
  12.     mutations:{},
  13.     actions:{},
  14.     modules:{
  15.         db
  16.     },
  17.     plugins:[vuexLocal.plugin]
  18. })
  19. export default store
复制代码
db.js内容
  1. const db = {
  2.     state: {
  3.         token: '',
  4.     },
  5.     getters:{
  6.         token:state => state.token
  7.     },
  8.     mutations: {
  9.         // 存储token
  10.         setToken: (state, value) => {
  11.             state.token = value
  12.         }
  13.     },
  14.     actions: {}
  15. }
  16. export default db
复制代码
接口封装
  1. import http from "../common/http"
  2. /***********登录注册*************/
  3. // 测试接口
  4. function text(params){
  5.     return http.get("api/Test/GetList", params)
  6. }
  7. //登录
  8. function Login(params) {
  9.     return http.post("api/Login/Login", params)
  10. }
  11. // 获取图形验证码
  12. function GetValidateCode(params) {
  13.     return http.post("api/Login/GetValidateCode", params)
  14. }
  15. // 获取手机验证码 注意:需要提前人机验证后调用 否则有被恶意刷短信的风险
  16. function GetPhoneCode(params) {
  17.     return http.post("api/Login/GetPhoneCode", params)
  18. }
  19. // 注册 校验信息
  20. function RegisterUserVerify(params) {
  21.     return http.post("api/Login/RegisterUserVerify", params)
  22. }
  23. // 注册 设置密码 注册用户信息
  24. function RegisterUserInfo(params) {
  25.     return http.post("api/Login/RegisterUserInfo", params)
  26. }
  27. // 忘记密码 验证姓名手机号
  28. function ResetPasswordVerify(params) {
  29.     return http.post("api/Login/ResetPasswordVerify", params)
  30. }
  31. // 忘记密码 密码更新
  32. function ResetPassWord(params) {
  33.     return http.post("api/Login/ResetPassWord", params)
  34. }
  35. export {
  36.     Login,
  37.     text,
  38.     GetPhoneCode,
  39.     RegisterUserVerify,
  40.     GetValidateCode,
  41.     ResetPasswordVerify,
  42.     ResetPassWord,
  43.     RegisterUserInfo
  44. }
复制代码
总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
                                                        
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
免责声明
1. 本论坛所提供的信息均来自网络,本网站只提供平台服务,所有账号发表的言论与本网站无关。
2. 其他单位或个人在使用、转载或引用本文时,必须事先获得该帖子作者和本人的同意。
3. 本帖部分内容转载自其他媒体,但并不代表本人赞同其观点和对其真实性负责。
4. 如有侵权,请立即联系,本网站将及时删除相关内容。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表