m0_60301490 2022-03-14 15:14 采纳率: 0%
浏览 196

uview http 封装请求 有没有适合零基础学习的文章,如何解决?

uview http 封装请求 有没有适合零基础学习的文章,如何解决?

  • 写回答

1条回答 默认 最新

  • 归来巨星 前端领域新星创作者 2022-03-14 15:28
    关注

    
    import axios from "axios";
    import qs from "qs";
    import { Toast } from "vant";
    // 引入element 按需引消息提示
    // import { Message } from 'element-ui'
    
    const service = axios.create({
      baseURL: "",
      timeout: 30000,
      withCredentials: true
    });
    // 请求拦截器
    let requestNum = 0;
    service.interceptors.request.use(
      config => {
        // 增添token
        // 每次请求时requestNum++
        requestNum++;
        config.headers["Content-Type"] = "application/x-www-form-urlencoded";
        Toast.loading({
          message: "加载中...",
          forbidClick: true
        });
        // config.headers.Authorization = localStorage.getItem('logintoken') || ''
        return config;
      },
      err => {
        requestNum = 0;
        Toast.clear();
        Promise.reject(err);
      }
    );
    // 响应拦截器
    service.interceptors.response.use(
      response => {
        // else if (response.data.code !== 200) {
        //   Message.error(response.data.msg || '接口请求错误', 2000)
        // }
        // 以服务的方式调用的 Loading 需要异步关闭
        // 每次请求时-- 主要时用于判断当前共请求了多少次,如果返还的次数不等于请求的次数的话就不会进入这个条件
        // 只有当所有数据全返还时,才会关闭loading效果
        requestNum--;
        if (requestNum <= 0) {
          Toast.clear();
          requestNum = 0;
        }
        // 如果正常直接返回对应data请求数据
        return response.data;
      },
      err => {
        // 如果请求一旦出现问题 requestNum = 0 loadingInstance.close();
        Message({
          message: "服务器错误,请及时联系管理员!",
          type: "error"
        });
        // 如果请求一旦出现问题 requestNum = 0 loadingInstance.close();
        requestNum = 0;
        Toast.clear();
        return Promise.reject(err);
      }
    );
    
    // 封装get请求
    const get = (url, params) => {
      return service({
        url: url,
        method: "get",
        params: params
      });
    };
    // 封装post请求
    const post = (url, data) => {
      return service({
        url: url,
        method: "post",
        headers: { "Content-type": "application/json" },
        data: JSON.stringify(data)
      });
    };
    // 封装登录请求
    const login = (url, data) => {
      return service({
        url: url,
        method: "post",
        headers: { "Content-type": "application/x-www-form-urlencoded" },
        data: qs.stringify(data)
      });
    };
    
    const upload = (url, data) => {
      service({
        method: "post",
        url: url,
        headers: {
          "Content-type": "application/x-www-form-urlencoded"
        },
        data: data
      });
    };
    export default {
      get,
      post,
      login,
      upload
      // baseURL,
      // upImgURL,
      // imgURL
    };
    
    

    你参考一下这个 这个是我当时封装的axios 就 uview的话也是类似的逻辑 主要的就是你的请求响应拦截 400 500等状态码统一处理
    token判断等等

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月14日

悬赏问题

  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题