微信小程序用Promise封装请求,统一管理接口

第一步

先在util文件夹下面新建一个如下的目录

1、url.js里面保存的是正式服测试服的域名,也可以添加其他的一些项目中会使用的域名信息

2、ajax.js里是用promise封装的网络请求

3、api.js里是用来统一管理页面中的接口

微信小程序用Promise封装请求,统一管理接口_第1张图片

主要代码如下

url.js

// let mainUrl = 'https://xxx'      //正式服
let mainUrl = 'http://xxxx' //测试服

module.exports = {
  mainUrl: mainUrl,
}

ajax.js

// Promise封装请求   options是一个对象里面的属性有url, data, method, load
function fetch(options) {
  if (options.load == 1) {
    wx.showLoading({
      mask: true,
      title: '加载中'
    })
  }

  return new Promise((resolve, reject) => {
    // 所有的请求加上固定的参数  区分是简单请求还是特殊请求
    //如果options.data是对象
    if (Object.prototype.toString.call(options.data) === '[Object Object]') {
      options.data.auth_token = '';
      options.data.uuid = '';
    }
    //如果是json字符串的特殊请求
    if (Object.prototype.toString.call(options.data) == "[object String]"){
      let obj=JSON.parse(options.data)
      obj.auth_token = '';
      obj.uuid = '';
      options.data = JSON.stringify(obj)
    }
    console.log(options.data)

    wx.request({
      url: options.url,
      data: options.data,
      header: {
        "content-type": "application/json"
      },

      // header: {
      //   "application/x-www-form-urlencoded;charset=utf-8"
      // },
      
      method: options.method,
      success: function(res) {
        // console.log(res)
        options.load == 1 ? wx.hideLoading() : '';
        //如果没有登录的操作
        if (res.data.code == 'login') {
          console.log('请先登录')
          return;
        }
        if (res.data.code != 1) {
          wx.showToast({
            title: res.errMsg,
            mask: "true",
            icon: 'none',
            duration: 3000
          })
          return;
        }

        resolve(res); //把请求到的数据发到引用请求的地方
      },
      fail: function(err) {
        reject(err)
        options.load == 1 ? wx.hideLoading() : ''
        wx.showToast({
          title: "网络连接超时",
          icon: 'none',
          duration: 3000,
        })
      }
    })
  });
}


module.exports = {
  fetch
}

api.js

const app = getApp()
const myUrl = require("./url.js");
import {
  fetch
} from "./ajax.js"   //引入封装的请求

export function homeList(parmas) {
  return fetch({
    url: myUrl.mainUrl,   //请求的域名
    data: parmas,         //请求的参数
    method: 'GET',        //请求的方法
    load: 0               //是否需要显示加载中的图标
  })
}

//特殊请求
export function addAdvertisements(params) {
  return fetch({
    url: myUrl.mainUrl,
    data: JSON.stringify(params),
    method: 'post',
    load: 0
  })
}

 

项目中使用

//引入api.js里需要用的的请求
import {
  homeList,
  addAdvertisements
} from "../../utils/requst/api.js";

//简单请求   特殊请求在这里的写法是一样的
//简单请求
getList: function() {
    let parmas = {
      controller: 'ssss',
      act: 'getlist',
      //这里是后台请求需要用到的参数
    }
    homeList(parmas).then(function(res) {
      console.log(res)
     //这里写你网络请求的正常逻辑
    })


  }


  // 特殊请求
  frim: function() {
    let parmas = {
      launchDate: "12:00~14:00",
      timeSlot: "2019-08-31~2019-08-31",
      userId: "388",
      videLength: "15",
    };

    addAdvertisements(parmas).then(function(res){
      console.log(res)
    })
  }

 

你可能感兴趣的:(统一管理接口,微信小程序)