• 【axios】-- axios 二次封装


    基本封装部分

    基本全局配置

    如baseUrl,超出时间等

    Token,密钥等

    出于权限和安全考虑的密钥设置到请求头

    响应的统一基本处理

    主要针对于错误的情况做全局统一处理

    封装的请求办法

    把对接口的请求封装为一个方法

    例子

    1. // 配置全局的基础配置:baseUrl,timeout,header,responType,withCredentials
    2. import axios from "axios"
    3. import router from "@/router"
    4. // 也可以把请求拦截器里的定义的东西提取出来,创建一个js文件(配置中心),在配置中心统一定义(后续好维护),通过import引入进来
    5. // base64
    6. import {Base64} from "js-base64"
    7. // 后面的请求用request来发
    8. let request = axios.creat({
    9. // 基础配置
    10. baseURL:'http://localhost:9090/',
    11. // timeout表示请求超过timeout时间没有响应就中断(单位为毫秒)
    12. timeout:30*1000,
    13. // responseType:"json" 规定后端返回的数据格式,默认值是json
    14. responseType:"json",
    15. headers:{
    16. // 看有没有什么特殊的header要加
    17. }
    18. })
    19. // 请求拦截器
    20. request.interceptors.request.use((config)=>{
    21. // token密钥的设置
    22. let token = localStorage.getItem("token");
    23. let user = localStorage.getItem("user")
    24. // 如果有值,代表以及登录了。这块我还没有详细区分这两个,都先判断,等研究这个的时候再来重写
    25. if (token || user){
    26. // 记得输出一下token和保存的user,下面的赋值,取决于user 的输出
    27. config.headers.token = token
    28. }
    29. // 密钥-secretId + 特殊算法(防止别人把token复制出来伪造请求)jwt记得研究一下
    30. let secretId = "hello";
    31. let secret = Base64.encode(secretId+new Date().toString()); //这里用的是后面加上时间戳,这个需要后端也加,然后进行比对就知道是不是客户端发送的了。记得要进行加密
    32. config.headers.secret = secret;
    33. return config
    34. },error =>{
    35. // 请求出错了
    36. return Promise.reject(new Error(error))
    37. })
    38. // 响应拦截器
    39. request.interceptors.response.use((res)=>{
    40. // 响应的统一处理(一般是来判断后端返回的状态码)
    41. // 只要发送成功,默认200
    42. const status = res.data.code || 200
    43. // 如果没有附带消息,默认"未知错误"
    44. const message = res.data.msg || "未知错误"
    45. if(status === 401){
    46. // 没权限,重新登录
    47. router.push("/login")
    48. }
    49. },error =>{
    50. // 组件库的提示,$waring
    51. return Promise.reject(new Error(error))
    52. })
    53. export default request

  • 相关阅读:
    【目标检测】41、CSPNet | 一种加强 CNN 模型学习能力的主干网络
    5.Vectors Transformation Rules
    RocketMQ 的消费者类型详解与最佳实践
    hadoop 大数据环境配置 ssh免密登录 centos配置免密登录 hadoop(四)
    Docker与低代码开发:重塑软件开发的未来
    vue中使用electron
    基于卷积神经网络与双向长短时融合的锂离子电池剩余使用寿命预测
    高效处理海量慢SQL日志文件:Java与JSQLParser去重方案详解
    SQL 优化
    PMP每日一练 | 考试不迷路-8.2(包含敏捷+多选)
  • 原文地址:https://blog.csdn.net/weixin_45836841/article/details/132579054