You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							116 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							116 lines
						
					
					
						
							3.0 KiB
						
					
					
				
								import { config } from '../config.js'
							 | 
						|
								import { store } from './store.js'
							 | 
						|
								
							 | 
						|
								const Method = {
							 | 
						|
								  GET: 'GET',
							 | 
						|
								  POST: 'POST'
							 | 
						|
								}
							 | 
						|
								// 定义一些通用常量
							 | 
						|
								const HTTPConst = {
							 | 
						|
								  TokenURL: '/api/miniuser/getToken'
							 | 
						|
								}
							 | 
						|
								class HTTP {
							 | 
						|
								  constructor() {
							 | 
						|
								    this.baseUrl = config.api_url
							 | 
						|
								  }
							 | 
						|
								  request = (params) => {
							 | 
						|
								    // 从缓存中读取 token
							 | 
						|
								    // let token = wx.getStorageSync(HTTPConst.TokenStoreKey) || ''
							 | 
						|
								    const token = store.readToken()
							 | 
						|
								    let url = this.baseUrl + params.url
							 | 
						|
								    //console.log(params.url)
							 | 
						|
								    if (!params.method) {
							 | 
						|
								      params.method = Method.GET
							 | 
						|
								    }
							 | 
						|
								    // token 拼接到 请求体中
							 | 
						|
								    let data = params.data
							 | 
						|
								    //console.log('请求Header和Body参数:')
							 | 
						|
								    let header = {
							 | 
						|
								      'token': token,
							 | 
						|
								      'content-type': 'application/json',
							 | 
						|
								    }
							 | 
						|
								    //console.log(header)
							 | 
						|
								    //console.log(data || {})
							 | 
						|
								    wx.request({
							 | 
						|
								      url: url,
							 | 
						|
								      data: data,
							 | 
						|
								      header: header,
							 | 
						|
								      method: params.method,
							 | 
						|
								      dataType: 'json',
							 | 
						|
								      success: (res) => {
							 | 
						|
								        //console.log(res.data)
							 | 
						|
								        let code = res.statusCode.toString()
							 | 
						|
								        let startCode = code.charAt(0)
							 | 
						|
								        if (startCode == '2') {
							 | 
						|
								          if (res.data.code == 200 || res.data.code == 0) {
							 | 
						|
								            params.success && params.success(res.data)
							 | 
						|
								          } else if (res.data.code == 302) {
							 | 
						|
								            // token 无效
							 | 
						|
								            this.fetchAuthToken(res => {
							 | 
						|
								              // 请求Token后,重新请求URL
							 | 
						|
								              if (res.code == 200) {
							 | 
						|
								                this.request(params)
							 | 
						|
								              }
							 | 
						|
								            })
							 | 
						|
								          } else {
							 | 
						|
								            //console.log('数据请求失败')
							 | 
						|
								            wx.showToast({
							 | 
						|
								              title: res.data.message || '服务器错误,请稍后重试',
							 | 
						|
								              icon: 'none'
							 | 
						|
								            })
							 | 
						|
								          }
							 | 
						|
								        } else {
							 | 
						|
								          //console.log('请求错误')
							 | 
						|
								          wx.showToast({
							 | 
						|
								            title: '服务器错误!',
							 | 
						|
								            icon: 'none'
							 | 
						|
								          })
							 | 
						|
								          params.error && params.error(res)
							 | 
						|
								        }
							 | 
						|
								      },
							 | 
						|
								      fail: function (res) {
							 | 
						|
								        wx.showToast({
							 | 
						|
								          title: '网络连接错误,请求稍后重试!',
							 | 
						|
								          icon: 'none'
							 | 
						|
								        })
							 | 
						|
								        params.fail && params.fail(res)
							 | 
						|
								      },
							 | 
						|
								    })
							 | 
						|
								  }
							 | 
						|
								  // 获取 Token
							 | 
						|
								  fetchAuthToken (success) {
							 | 
						|
								    // 获取token
							 | 
						|
								    this._fetchWXCode().then(res => {
							 | 
						|
								      //console.log('啦啦啦啦凉啊')
							 | 
						|
								      //console.log(res)
							 | 
						|
								      if (!res) return
							 | 
						|
								      let params = {
							 | 
						|
								        url: HTTPConst.TokenURL,
							 | 
						|
								        method: Method.POST,
							 | 
						|
								        data: {
							 | 
						|
								          code: res
							 | 
						|
								        },
							 | 
						|
								        success: (data) => {
							 | 
						|
								          // 将获取到的token存放起来
							 | 
						|
								          const { token, userInfo } = data.result
							 | 
						|
								          store.saveToken(token)
							 | 
						|
								          store.saveUserInfo(userInfo)
							 | 
						|
								          success(data)
							 | 
						|
								        },
							 | 
						|
								      }
							 | 
						|
								      this.request(params)
							 | 
						|
								    })
							 | 
						|
								  }
							 | 
						|
								  // 获取微信code 
							 | 
						|
								  _fetchWXCode () {
							 | 
						|
								    return new Promise(resolve => {
							 | 
						|
								      wx.login({
							 | 
						|
								        success (res) {
							 | 
						|
								          //console.log('获取Code成功 ' + res.code)
							 | 
						|
								          resolve(res.code)
							 | 
						|
								        }
							 | 
						|
								      })
							 | 
						|
								    })
							 | 
						|
								  }
							 | 
						|
								}
							 | 
						|
								export { HTTP, Method, HTTPConst }
							 | 
						|
								
							 |