uniapp请求拦截封装

// request.js
const baseUrl = '';
let requestTask = {}
function http(url, method, data, header) {
	data = data || {};
	header = header || {};
	method = method;
	return new Promise(function(resolve, reject) {
		requestTask[url] = uni.request({
			url: baseUrl + url,
			header: {
				"Content-Type": "application/x-www-form-urlencoded",
				'Authorization': uni.getStorageSync('token')
			},
			data: data,
			method: method,
			success: (res)=> {
				//响应拦截
				if (res.data.code == 10000) {
					resolve(res.data.data);
				} else {
					reject(res);
				}
			},
			fail:(res)=> {
				if (res.errMsg.includes('timeout')) {
					uni.showModal({
						content: '抱歉请求超时,请稍后重试',
						showCancel: false
					})
				}
				reject('网络出错');
			}
		});
	}).catch(res => {
		if (res.data.code == 40300 || res.data.code == 40302 || res.data.code == 40301) {
			uni.showModal({
				title: '',
				content: '登录失效,重启小程序重新登录',
				confirmColor: obj.theme_color,
				showCancel: false,
				mask: true,
				success(res) {
					if (res.confirm) {
						getApp().globalData.login('reLogin');
					}
				}
			});
			return Promise.reject(res.data);
		} else if (res.data.code == 50006) {
			return Promise.reject(res.data);
		} else {
			return Promise.reject(res.data);
		}
	});
}

module.exports = {
	baseUrl: baseUrl,
	"get": function(url, data, header) {
		return http(url, "get", data, header);
	},
	"post": function(url, data, header) {
		return http(url, "post", data, {
			'content-type': header ? header : 'application/x-www-form-urlencoded'
		});
	},
	"put": function(url, data, header) {
		return http(url, "put", data, header);
	},
	"delete": function(url, data, header) {
		return http(url, "delete", data, header);
	},
	requestTask: requestTask
};

api集中管理

// common.js
import http from '../http/index';
export default {
	get(data) {
		return http.get('/index/getWxMsgTemplateIds', data);
	},
	post(data) {
		return http.post('/index/getThreeRegionList', data);
	},
}

export function abortRequest(url){
	 let key = ''
	 for (let e in http.requestTask) {
			if(e.includes(url)) key = e
	 }
	 http.requestTask[key].abort()
}

挂载全局

// api.js
import common,{abortRequest} from './common';
export default {
  common,
  abortRequest
};
// main.js
import api from 'api/api.js';	
Vue.prototype.$api = api 

页面调用

// 请求
this.$api.common.get(data).then(res =>{})
// 中断
this.$api.abortRequest('get')
以下是一个示例,展示了如何在uniapp封装请求: 1. 创建一个utils文件夹,并在其中创建一个request.js文件。 ```javascript // request.js // 导入uni.request方法 import uniRequest from 'uni-request'; // 创建一个请求实例 const request = uniRequest.create({ baseURL: 'https://api.example.com', // 设置请求的基础URL timeout: 5000, // 设置请求超时时间 }); // 请求拦截器 request.interceptors.request.use((config) => { // 在请求发送之前可以进行一些操作,例如添加请求头等 config.header.Authorization = 'Bearer token123'; // 添加请求头 return config; }, (error) => { return Promise.reject(error); }); // 响应拦截器 request.interceptors.response.use((response) => { // 在接收到响应数据之前可以进行一些操作,例如处理错误码等 if (response.statusCode !== 200) { // 处理错误码 uni.showToast({ title: '请求失败', icon: 'none', }); } return response.data; }, (error) => { return Promise.reject(error); }); // 导出封装后的请求方法 export default request; ``` 2. 在需要发送请求的地方引入封装后的request.js文件,并使用封装请求方法。 ```javascript // 引入封装后的请求方法 import request from '@/utils/request'; // 发送请求 request({ url: '/user/login', method: 'POST', data: { username: 'example', password: '123456', }, }).then((res) => { // 请求成功的处理逻辑 console.log(res); }).catch((error) => { // 请求失败的处理逻辑 console.error(error); }); ``` 这样,你就可以在uniapp封装请求,并使用类似axios的方式进行请求了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值