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.
216 lines
4.9 KiB
216 lines
4.9 KiB
/**
|
|
* Copyright © 2020-present LiuDanYang. All rights Reserved.
|
|
*/
|
|
|
|
import axios from "./axios"
|
|
const event = require('../utils/event')
|
|
const storage = require('../utils/storage')
|
|
const app = getApp()
|
|
/**
|
|
* axios defaults 配置
|
|
*/
|
|
axios.defaults = {
|
|
timeout: 15000
|
|
}
|
|
|
|
/**
|
|
* 全局 请求拦截器, 支持添加多个拦截器
|
|
* 例如: 配置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<reject>}
|
|
*/
|
|
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<never>|*}
|
|
*/
|
|
function handleResponse({ data, status }) {
|
|
if(!data){
|
|
return Promise.reject('服务器错误')
|
|
}
|
|
const STATUS = {
|
|
"200"() {
|
|
return handleResult(data)
|
|
},
|
|
"-200"() {
|
|
return Promise.reject('服务接口熔断')
|
|
},
|
|
"400"() {
|
|
return Promise.reject(data)
|
|
},
|
|
"401"() {
|
|
return Promise.reject('请求未授权')
|
|
},
|
|
"401"() {
|
|
return Promise.reject('请求未授权')
|
|
},
|
|
"404"() {
|
|
return Promise.reject('URL错误')
|
|
},
|
|
"500"() {
|
|
return Promise.reject('服务器错误')
|
|
}
|
|
}
|
|
var message = '请求错误'
|
|
if (data.message) {
|
|
message = data.message
|
|
}
|
|
// 有状态码但不在这个封装的配置里,就直接返回错误
|
|
return STATUS[status] ? STATUS[status]() : Promise.reject(message)
|
|
}
|
|
|
|
function handleResult(result) {
|
|
if (result.code === 0) {
|
|
return result
|
|
}
|
|
if (result.code === 401) {
|
|
app.globalData.token = null
|
|
app.userInfo = null
|
|
storage.remove('Authorization')
|
|
event.emit('EventMessage', { what: 666, 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 = 'Token异常'
|
|
if (result.message) {
|
|
message = result.message
|
|
}
|
|
return Promise.reject(message)
|
|
} else if (result.code === 200101) {
|
|
return Promise.reject(result)
|
|
}
|
|
var message = '数据错误'
|
|
if (result.message) {
|
|
message = result.message
|
|
}
|
|
return Promise.reject(message)
|
|
}
|
|
|
|
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)
|
|
})
|
|
})
|
|
}
|