|
- export default class Request {
- config = {
- baseUrl: '',
- header: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- },
- method: 'GET',
- dataType: 'json',
- responseType: 'text',
- success() {},
- fail() {},
- complete() {}
- }
-
- static posUrl(url) {
- /* 判断url是否为绝对路径 */
- return /(http|https):\/\/([\w.]+\/?)\S*/.test(url)
- }
-
- interceptor = {
- request: (f) => {
- if (f) {
- this.requestBeforeFun = f
- }
- },
- response: (f) => {
- if (f) {
- this.requestComFun = f
- }
- }
- }
-
- static requestBeforeFun(config) {
- return config
- }
-
- static requestComFun(response) {
- return response
- }
-
- setConfig(f) {
- this.config = f(this.config)
- return this
- }
-
- request(options = {}) {
- options.baseUrl = options.baseUrl || this.config.baseUrl
- options.dataType = options.dataType || this.config.dataType
- options.url = Request.posUrl(options.url) ? options.url : (options.baseUrl + options.url)
- options.data = options.data || {}
- options.header = options.header || this.config.header
- options.method = options.method || this.config.method
- if (options['Content-Type']) options.header['Content-Type'] = options['Content-Type']
- // console.log(options)
- return new Promise((resolve, reject) => {
- let next = true
- let _config = null
- options.complete = (response) => {
- let statusCode = response.statusCode
- response.config = _config
- response = this.requestComFun(response)
- if (statusCode != 200) {
- let errMessage = '';
- switch (statusCode) {
- case 400:
- errMessage = '请求错误(400)';
- break;
- case 401:
- errMessage = '未授权,请重新登录(401)';
- uni.showToast({
- title: '登录失效',
- icon: 'none',
- position: 'bottom',
- duration: 1500
- })
- break;
- case 403:
- errMessage = '拒绝访问(403)';
- break;
- case 404:
- errMessage = '请求出错(404)';
- break;
- case 408:
- errMessage = '请求超时(408)';
- break;
- case 500:
- errMessage = '服务器错误(500)';
- break;
- case 501:
- errMessage = '服务未实现(501)';
- break;
- case 502:
- errMessage = '网络错误(502)';
- break;
- case 503:
- errMessage = '服务不可用(503)';
- break;
- case 504:
- errMessage = '网络超时(504)';
- break;
- case 505:
- errMessage = 'HTTP版本不受支持(505)';
- break;
- default:
- errMessage = "连接出错(" + statusCode + ")!";
- break;
- }
-
- if (statusCode != 401) {
- uni.showToast({
- title: errMessage,
- icon: 'none',
- position: 'bottom',
- duration: 1500
- })
- }
- reject({
- statusCode,
- errMessage
- })
- } else {
- let _code = response.data.code;
- if (_code == '-201' || _code == '-202' || _code == '-203') {
- uni.showToast({
- title: '登录失效 请重新登录',
- icon: 'none',
- })
- } else {
- resolve(response)
- }
- }
- uni.stopPullDownRefresh();
- }
- let cancel = (t = 'handle cancel') => {
- let err = {
- errMsg: t,
- config: afC
- }
- reject(err)
- next = false
- }
- let afC = {
- ...this.config,
- ...options
- }
- _config = {
- ...afC,
- ...this.requestBeforeFun(afC, cancel)
- }
- if (!next) return
- uni.request(_config)
- })
- }
-
- get(url, data, options = {}) {
- options.url = url
- options.data = data
- options.method = 'GET'
- return this.request(options)
- }
-
- post(url, data, options = {}) {
- options.url = url
- options.data = data
- options.method = 'POST'
- return this.request(options)
- }
- }
|