【微信小程序】挂载网络请求到全局this对象

【微信小程序】挂载网络请求到全局this对象

《工欲善其事,必先利其器》

banner

有一些常用的东西,如http请求、弹窗、错误处理等等,如果在每个页面都引用一遍,会增加不必的代码量,我们可以在app.js中对Page对象进行简单地封装,从而让Page的能力更强。

一、封装原生网络请求

request.js

/**
 * @description 网络请求封装
 * @author Coder.Li
 * @param {string} path 路径
 * @param {string} method 请求方式
 * @param {object} data 请求数据
 * @param {string} loadingTxt 加载提示
 */
const CONFIG = require('../config/index');
const md5 = require('../utils/md5');
const request = (path, method, data, loadingTxt = 'loading...') => {
	let url = CONFIG.apiUrl + path,
		token = wx.getStorageSync('token') || '',
		timestamp = new Date() * 1, // 获取时间戳
		sign = md5(
			`appid=${CONFIG.appid}&timestamp=${timestamp}&appkey=${CONFIG.appkey}`
		);
	return new Promise((resolve, reject) => {
		// 低于指定某个时间内的请求不显示loading
		let timer = setTimeout(() => {
			wx.showLoading({
				title: loadingTxt,
				mask: true,
				duration: 5000,
			});
		}, 200);
		wx.request({
			url,
			method: method,
			data: data,
			header: {
				appid: CONFIG.appid,
				token: token,
				timestamp: timestamp,
				sign: sign,
			},
			success(request) {
				resolve(request.data);
			},
			fail(error) {
				reject(error.data);
			},
			complete(v) {
				wx.hideLoading();
				clearTimeout(timer);
			},
		});
	});
};

module.exports = request;

二、app.js 引入网络请求,挂载到全局对象 this 上

app.js

/**
 * @description 入口及公共挂载
 * @author Coder.Li
 * */
const $API = require('./utils/request');
const $CONFIG = require('./config/index');

App({
	onLaunch: function(options) {
		// 注册全局方法
		this.enhancePage();
	},
	/**
     * @description 挂载全局方法, this调用
     * @author Coder.Li
     * */
	enhancePage() {
		const oPage = Page;
		Page = config => oPage(Object.assign(config, {
			$API,
			$CONFIG
		}))
	}
})

三、页面调用

async getData() {
	const result = await this.$API(url, method, data, loadingTxt)
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值