//获取当前允许环境
const env = wx.getAccountInfoSync().miniProgram.envVersion;
if (!env) {
   console.error("获取运行环境失败!")
}
//设置运行环境地址
const api = {
   // 开发版
   develop: "http://124.221.134.93:8088",
   // 体验版
   trial: "http://124.221.134.93:8088",
   // 正式版
   release: "http://124.221.134.93:8088",
}
const baseURL = api[env];


const http = ({
   url,
   data,
   method = 'POST',
}) => {
   const cookie = wx.getStorageSync('cookie');
   const csrfToken = wx.getStorageSync('csrfToken');
   const header = {
      "content-type": 'application/json',
      'cookie': cookie,
      'X-CSRF-Token': csrfToken
   }
   method = (method || 'POST').toLocaleLowerCase();
   return new Promise((resolve, reject) => {
      wx.request({
         url: baseURL + url,
         method,
         data,
         dataType: "json",
         header,
         timeout: 7000, //请求超时时间
         success: (res) => {
            console.log("响应结果", res)
            if (res.statusCode >= 200 && res.statusCode < 300) {
               resolve(res.data);
            } else if (res.statusCode === 401) { //token过期或者token出错了
               getNewToken().then(res=>{
               //成功获取新的cookie后,再次发起业务请求,并返回结果
                 resolve(http({method, url, data}))
               });
            } else {
               wx.showToast({
                  title: res.data.message,
                  icon: "none",
                  duration: 2000
               })
            }
         },
         fail: (err) => { //请求失败
            wx.showModal({
               title: '服务器出错',
               content: '服务器出错了,请稍后再试!',
               showCancel: false,
            })
            reject(err);
         },
         complete: (res) => {
            // wx.hideLoading()
         }
      })
   });
}
function getNewToken () {
   return new Promise((resolve, reject) => {
      
            const {
               username,
               password
            } = wx.getStorageSync('loginInfo')
            wx.request({
               url: baseURL + '/signin', //在user/login的接口中,后台返回用户的信息并且带有token
               method: 'post',
               header:{
                  "content-type": 'application/json'
               },
               data: {
                  username,
                  password,
               },
               success(res) {
                  if (res.statusCode == 200) { //这里相当于用户又一次登录,并且得到了一个新的cookie并把它写入了 storage本地缓存中
                    //设置新的cookie逻辑代码
                    
                     resolve(res); 
                  }
               },
               fail(err) {
                  console.log('请求出错啦' + err)
                  reject()
               }
            })
         }
   })
}

module.exports = http;
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐