zoukankan      html  css  js  c++  java
  • Taro request 请求封装

    在根目录下创建service文件夹

    再创建 baseUrl文件 写入请求地址

    const getBaseUrl = (url) => {
      let BASE_URL = '';
      if (process.env.NODE_ENV === 'development') {
        //开发环境 - 根据请求不同返回不同的BASE_URL
    BASE_URL = 'https://*********'
      } else {
        // 生产环境
    
    BASE_URL = 'https://*********'
       
      }
      return BASE_URL
    }
    
    export default getBaseUrl;
    

     创建config.js文件写入常用状态码

    export const HTTP_STATUS = {
      SUCCESS: 200,
      CREATED: 201,
      ACCEPTED: 202,
      CLIENT_ERROR: 400,
      AUTHENTICATE: 401,
      FORBIDDEN: 403,
      NOT_FOUND: 404,
      SERVER_ERROR: 500,
      BAD_GATEWAY: 502,
      SERVICE_UNAVAILABLE: 503,
      GATEWAY_TIMEOUT: 504
    }
    

      创建http文件写入逻辑

    import Taro from '@tarojs/taro'
    import getBaseUrl from './baseUrl'
    import interceptors from './interceptors'
     
    interceptors.forEach(interceptorItem => Taro.addInterceptor(interceptorItem))
     
    class httpRequest {
       
      baseOptions(params, method = "GET") {
        let { url, data,param } = params;
        const BASE_URL = getBaseUrl(url);
        // let contentType = "application/x-www-form-urlencoded";
        let contentType = "application/json;charset=UTF-8";
        contentType = params.contentType || contentType;
        const option = {
          url: BASE_URL + url,  //地址
          data: data,   //传参
          method: method, //请求方式
          timeout:50000, // 超时时间
          header: {  //请求头
            'content-type': contentType,      
            'Authorization':Taro.getStorageSync('Authorization')
          }
        };
        return Taro.request(option);
      }
     
      get(url, data = "",param) {
        let option = { url, data,param };
        return this.baseOptions(option);
      }
     
      post(url, data,param, contentType) {
        let params = { url, data,param, contentType };
        return this.baseOptions(params, "POST");
      }
     
      put(url, data = "") {
        let option = { url, data };
        return this.baseOptions(option, "PUT");
      }
     
      delete(url, data = "") {
        let option = { url, data };
        return this.baseOptions(option, "DELETE");
      }
     
    }
     
    export default new httpRequest()
    

      

      再创建interceptors文件 写入异常显示逻辑

    import Taro from "@tarojs/taro"
    import { pageToLogin } from "./utils"
    import { HTTP_STATUS } from './config'
    
    const customInterceptor = (chain) => {
    
      const requestParams = chain.requestParams
      Taro.showLoading({
        title: '加载中',
      })
      return chain.proceed(requestParams).then(res => {
        Taro.hideLoading()
        // 只要请求成功,不管返回什么状态码,都走这个回调
        if (res.statusCode === HTTP_STATUS.NOT_FOUND) {
          return Promise.reject({ desc: '请求资源不存在' })
    
        } else if (res.statusCode === HTTP_STATUS.BAD_GATEWAY) {
          return Promise.reject({ desc: "服务端出现了问题" })
    
        } else if (res.statusCode === HTTP_STATUS.FORBIDDEN) {
          Taro.setStorageSync("Authorization", "")
          pageToLogin()
          // TODO 根据自身业务修改
          return Promise.reject({ desc: "没有权限访问" });
    
        } else if (res.statusCode === HTTP_STATUS.AUTHENTICATE) {
          Taro.setStorageSync("Authorization", "")
          pageToLogin()
          return Promise.reject({ desc: "需要鉴权" })
    
        } else if (res.statusCode === HTTP_STATUS.SERVER_ERROR) {
          return Promise.reject({ desc: "服务器错误" });
        } else if (res.statusCode === HTTP_STATUS.SUCCESS) {
          if (res.data.code === 0) {
            return res.data
          } else if (res.data.code == '-100') {
            //非法登录
            pageToLogin()
          }
          else {
            return Promise.reject(res.data)
          }
        }
      }).catch(error=> {
        Taro.hideLoading()
        console.error(error)
        return Promise.reject(error)
      })
    }
    
    // Taro 提供了两个内置拦截器
    // logInterceptor - 用于打印请求的相关信息
    // timeoutInterceptor - 在请求超时时抛出错误。
    // const interceptors = [customInterceptor, Taro.interceptors.logInterceptor]
    const interceptors = [customInterceptor]
    
    export default interceptors
    

      创建utils文件 写入处理异常状态方法

    import Taro from "@tarojs/taro";
    /**
     * @description 获取当前页url
     */
    export const getCurrentPageUrl = () => {
      let pages = Taro.getCurrentPages()
      let currentPage = pages[pages.length - 1]
      let url = currentPage.route
      return url
    }
    
    export const pageToLogin = () => {
      let path = getCurrentPageUrl()
      Taro.clearStorage()
      if (!path.includes('login')) {
        Taro.reLaunch({
          url: "/pages/login/login"
        });
      }
    }
    

      最后创建 servers文件进行api注册

    import HTTPREQUEST from "./http"
    
    export const getLogin = (data) => {
      return HTTPREQUEST.post('/api/login/login', data)
    }
    

      最后在页面引入就可以了

  • 相关阅读:
    图书管理系统---基于form组件和modelform改造添加和编辑
    Keepalived和Heartbeat
    SCAN IP 解释
    Configure Active DataGuard and DG BROKER
    Oracle 11gR2
    我在管理工作中積累的九種最重要的領導力 (李開復)
    公募基金公司超融合基础架构与同城灾备建设实践
    Oracle 11g RAC for LINUX rhel 6.X silent install(静默安装)
    11gR2 静默安装RAC 集群和数据库软件
    Setting Up Oracle GoldenGate 12
  • 原文地址:https://www.cnblogs.com/BySee1423/p/14470276.html
Copyright © 2011-2022 走看看