uni-app uni.request网络请求封装

最下面有个缝缝补补最终版

第一种封装方式:使用Promise

request.js

import Vue from 'vue'
Vue.prototype.baseURL = process.env.NODE_ENV === 'development' ? 'http://192.168.0.18:9004' : 'http://***/api' ; //环境配置

export default function http(options) {
	let header = options.header || {};
	let data = options.data || {};

	let token = uni.getStorageSync('token');
	header['token'] = token ? token : "";
 
    //全局参数
	let memberId = uni.getStorageSync('memberId');
	data.memberId = memberId ? memberId : "";
	
	let eaId = uni.getStorageSync('eaId');
	data.eaId = eaId ? eaId : "";

	if (options.url != '/auth/login' && !token) {
		uni.reLaunch({
			url: '/pages/login/login.vue'
		});
		return
	}

	//	发起请求 加载动画
	if (!options.hideLoading) {
		uni.showLoading({
			title: "加载中"
		})
	}
	
	//	发起网络请求
	return new Promise((resolve,reject)=>{
		uni.request({
			url: this.baseURL + options.url,
			method: options.method,
			header: header,
			data: data,
			// dataType: "json",
			// sslVerify: false, //	是否验证ssl证书
			success: res => {
				if (res.statusCode && res.statusCode != 200) {
					return uni.showModal({
						content: res.errMsg ? res.errMsg : '出错了'
					})
				}
				resolve(res.data)
			},
			fail: err => {
				uni.showModal({
					content: err.errMsg? err.errMsg: "出错了"
				})
				reject(err)
			},
            complete: (e) => {
				console.log("请求完成");
				uni.hideLoading()
			}
		})
	})
	
}

main.js中

import Vue from 'vue'
import App from './App'

import request from './common/js/request.js'
Vue.config.productionTip = false

Vue.prototype.$request = request
App.mpType = 'app'

const app = new Vue({
	...App
})
app.$mount()

页面中使用


methods:{
    //或者
    getMessage(){
        this.$request({url: "/markting/h5/isEaH5"}).then((res)=>{
		    console.log(res)
	    })
    },

    //或者
    async getMessage(){
        let res = await this.$request({url: "/hh/apply"})
    }


 }



第二种封装方式:不使用Promise

http.js

import Vue from 'vue'
Vue.prototype.baseURL = process.env.NODE_ENV === 'development' ? 'http://192.168.0.18:9004' : 'http://***/api' ; //环境配置

export default function http(options) {
	let header = options.header || {};
	let data = options.data || {};

	let token = uni.getStorageSync('token');
	header['token'] = token ? token : "";
 
    //全局参数
	let memberId = uni.getStorageSync('memberId');
	data.memberId = memberId ? memberId : "";
	
	let eaId = uni.getStorageSync('eaId');
	data.eaId = eaId ? eaId : "";

	if (options.url != '/auth/login' && !token) {
		uni.reLaunch({
			url: '/pages/login/login.vue'
		});
		return
	}

	//	发起请求 加载动画
	if (!options.hideLoading) {
		uni.showLoading({
			title: "加载中"
		})
	}
	
	//	发起网络请求
	uni.request({
		url: this.baseURL + options.url,
		method: options.method,
		header: header,
		data: data,
		// dataType: "json",
		// sslVerify: false, //	是否验证ssl证书
		success: res => {
			if (res.statusCode && res.statusCode != 200) {
				return uni.showModal({
					content: res.errMsg ? res.errMsg : '出错了' // 
				})
			}
			typeof options.success == "function" && options.success(res.data);
		},
		fail: err => {
			uni.showModal({
				content: err.errMsg? err.errMsg: "出错了"
			})
			typeof options.fail == "function" && options.fail(err.data);
		},
		complete: (e) => {
			console.log("请求完成");
			uni.hideLoading()
			typeof options.complete == "function" && options.complete(e);
			return;
		}
	})
}

main.js

import Vue from 'vue'
import App from './App'
import http from './common/js/http.js'

Vue.config.productionTip = false

Vue.prototype.$http = http

App.mpType = 'app'

const app = new Vue({
	...App
})
app.$mount()

页面中使用

getMessage(){
    this.$http({
	    url: "/hh/apply",
	    method: 'POST',
	    data: this.form,
	    success: (res) => {
		    console.log(res)
		    uni.showToast({
			    title: '申请成功',
			    duration: 1000
		    });
	    }
    })
}

缝缝补补最终版

import Vue from 'vue'
 Vue.prototype.baseURL = process.env.NODE_ENV === 'development' ? 'http://192.168.0.20:8080' : 'http://xxx'; //环境配置

export default function request(options) {
	let header = options.header || {};
	let data = options.data || {};

	let token = uni.getStorageSync('token');
	header['token'] = token ? token : "";
	
    //需要token的接口但是没有token
	if (!options.notNeedToken && !token) {
		uni.reLaunch({
			url: '/pages/loginByAccount/loginByAccount'
		});
		return new Promise((resolve, reject) => {
			reject({code:12,msg:'请登录'})
		})
	}

	//	发起请求 加载动画
	if (!options.hideLoading) {
		uni.showLoading({
			title: "加载中"
		})
	}

	//	发起网络请求
	return new Promise((resolve, reject) => {
		uni.request({
			url: this.baseURL + options.url,
			method: options.method || 'GET',
			header: header,
			data: data,
			// dataType: "json",
			// sslVerify: false, //	是否验证ssl证书
			success: res => {
				if (res.statusCode && res.statusCode != 200) {
					return uni.showModal({
						content: res.errMsg ? res.errMsg : '出错了'
					})
				}
                //登录失效 token失效
				if(res.data.code === 100005002){
					uni.showToast({
						icon:'none',
						duration:3000,
						title:'登录失效,请重新登录'
					})
					return uni.reLaunch({
						url:'/pages/loginByAccount/loginByAccount.vue'
					})
				}
				resolve(res.data)
			},
			fail: err => {
				uni.showModal({
					content: err.errMsg ? err.errMsg : "出错了"
				})
				reject(err)
			},
			complete: (e) => {
				uni.hideLoading()
				uni.stopPullDownRefresh();
			}
		})
	})

}

  • 1
    点赞
  • 8
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页
评论

打赏作者

有蝉

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值