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)
    }
    

      最后在页面引入就可以了

  • 相关阅读:
    vue-nuxtjs
    mongodb4.0支持事务
    promisify,promisifyAll,promise.all实现原理
    nodejs, 阿里oss上传下载图片
    数据库备份与还原
    SQL 数据类型、约束、索引及视图
    数据库的查询
    数据库(增、删、改、查)
    数据库基础知识
    C#语言小结
  • 原文地址:https://www.cnblogs.com/BySee1423/p/14470276.html
Copyright © 2011-2022 走看看