/** * Copyright © 2020-present LiuDanYang. All rights Reserved. */ import axios from "./axios" const event = require('../utils/event') const util = require('../utils/util') const app = getApp() /** * axios defaults 配置 */ axios.defaults = { timeout: 60000 } /** * 全局 请求拦截器, 支持添加多个拦截器 * 例如: 配置token、添加一些默认的参数 * `return config` 继续发送请求 */ axios.interceptors.request.use( config => { config.header = { ...config.header, 'X-APP-ID': app.xAppId, appversion: app.version } return config }, error => { // 做一些请求错误 console.error(error) return Promise.reject(error) } ) /** * 全局 响应拦截器, 支持添加多个拦截器 * 例如: 根据状态码选择性拦截、过滤转换数据 * @param {Object} res 请求返回的数据 * @return {Promise} */ axios.interceptors.response.use( async (res) => { const { data, statusCode: status } = res try { return await handleResponse({ data, status }) } catch (err) { return Promise.reject(err) } }, (err) => { // 做一些请求错误 return Promise.reject(err) } ) /** * 处理 HTTP 状态码 * @param data {Object} 请求返回的数据 * @param status {String} HTTP状态码 * @returns {Promise|*} */ function handleResponse({ data, status }) { if(!data){ return Promise.reject('服务器错误') } const STATUS = { "200"() { if (data.code === 0) { return Promise.resolve(data) } if (data.code === 401 && app.globalData.token) { app.globalData.token = null app.userInfo = null wx.removeStorageSync('Authorization') event.emit('EventMessage', { what: 888, desc: 'Logout' }) let pages = getCurrentPages() //当前页面栈 let prevPage = pages[pages.length - 1] //当前页面 if (prevPage.route != 'pages/login/index') { wx.showModal({ title: '温馨提示', content: '登录信息已经过期,请重新登录', showCancel: false, success: function (res) { if (res.confirm) { wx.reLaunch({ url: '/pages/login/index' }) } } }) } var message = '' if (data.message) { message = data.message } return Promise.reject(message) } var message = '数据错误' if (data.message) { message = data.message } return Promise.reject(message) }, "400"() { return Promise.reject('请求错误') }, "401"() { return Promise.reject('请求未授权') }, "403"() { return Promise.reject('拒绝请求') }, "404"() { return Promise.reject('URL错误') }, "500"() { return Promise.reject('服务器错误') } } // 有状态码但不在这个封装的配置里,就直接返回错误 return STATUS[status] ? STATUS[status]() : Promise.reject('请求错误') } export default axios /** * get 请求方式 * @param url {String} 接口地址 * @param params {Object} 接口参数 * @returns {AxiosPromise} * @constructor */ export function mGet(url, params, config) { return new Promise((resolve, reject) => { axios.get(url, params, config).then((res) => { resolve(res) }).catch(err => { reject(err) }) }) } /** * post 请求方式 * @param url {String} 接口地址 * @param data {Object} 接口参数 * @returns {AxiosPromise} * @constructor */ export function mPost(url, data, config) { return new Promise((resolve, reject) => { axios.post(url, data, config).then((res) => { resolve(res) }).catch((err) => { reject(err) }) }) } /** * put 请求方式-用于修改全部数据 * @param url {String} 接口地址 * @param data {Object} 接口参数 * @returns {AxiosPromise} * @constructor */ export function mPut(url, data, config) { return new Promise((resolve, reject) => { axios.put(url, data, config).then((res) => { resolve(res) }).catch((err) => { reject(err) }) }) } /** * patch 请求方式-用于修改单项或多项数据 * @param url {String} 接口地址 * @param data {Object} 接口参数 * @returns {AxiosPromise} * @constructor */ export function mPatch(url, data, config) { return new Promise((resolve, reject) => { axios.patch(url, data, config).then((res) => { resolve(res) }).catch((err) => { reject(err) }) }) } /** * delete 请求方式 * @param url {String} 接口地址 * @param params {Object} 接口参数 * @returns {AxiosPromise} */ export function mDelete(url, params, config) { return new Promise((resolve, reject) => { axios.delete(url, params, config).then((res) => { resolve(res) }).catch((err) => { reject(err) }) }) }