首页 > 其他分享 >【uniapp】一个封装uni.request请求的模板

【uniapp】一个封装uni.request请求的模板

时间:2022-11-12 15:23:21浏览次数:39  
标签:uniapp 请求 title url res request uni options

在项目目录下创建util目录,创建request.js 将下面模板写入。

// 全局请求路径,也就是后端的请求基准路径
const BASE_URL_develop = 'http://*******************/'

var BASE_URL = 'http://******.*****.***/'
if (process.env.NODE_ENV === 'development') {
	BASE_URL = BASE_URL_develop;
	console.log('开发环境')
} 
// 同时发送异步代码的次数,防止一次点击中有多次请求,用于处理
let ajaxTimes = 0;
// 封装请求方法,并向外暴露该方法
export const myHttp = (options) => {
	// 解构请求头参数
	let header = {
		...options.header
	};
	// 当前请求不是登录时请求,在header中加上后端返回的token

	if (options.url != 'login') {
		header["token"] = uni.getStorageSync('token');
	}

	// 无感知请求列表
	var no_feel_urls = ['department/listinfo', 'user/getinfo', 'user/getalluser', 'project/getprojects',
		'project/selectprojectbyid'
	]
	console.log('正在请求:' + options.url)
	if (!no_feel_urls.includes(options.url)) {

		uni.showLoading({
			title: "加载中",
			mask: true,
		});
		ajaxTimes++;
	}
	/*
	
	*/
	return new Promise((resolve, reject) => {
		uni.request({
			url: BASE_URL + options.url,
			method: options.method || 'POST',
			data: options.data || {},
			header,
			success: (res) => {
				if (res.statusCode == 500) {
					uni.showToast({
						title: 'code:500,后端的锅',
						icon: 'none'
					})

				} else if (res.statusCode == 200) {
					console.log(res.data)
					
					var obj = JSON.parse(JSON.stringify(res.data));
					if (obj.code == 1) {
						resolve(obj)
					} else if (obj.code == 1000) {
						uni.showToast({
							title: '您未登录,请登录后操作。',
							icon: 'none',
							success() {
								setTimeout(function() {
									uni.navigateTo({
										url: '/pages/login/login'
									})
								}, 1000)
							}
						})
					} else {
						uni.showModal({
							title: '错误',
							content: obj.msg
						})
					}
				} else {
					uni.showToast({
						title: '错误代码:' + res.statusCode,
					})
				}


			},
			fail: (err) => {
				console.log(err.code)
				uni.showToast({
					title: '网络或服务器异常' + err.errMsg,
					icon: 'none'
				})
				reject(err)
			},
			// 完成之后关闭加载效果
			complete: () => {
				if (ajaxTimes > 0) {
					ajaxTimes--;
				}
				if (ajaxTimes === 0) {
					//  关闭正在等待的图标
					uni.hideLoading();
				}
			}
		})
	})
}

 在main.js文件中引入:

import { myHttp } from './util/request.js'
Vue.prototype.$myHttp = myHttp   

以后写的时候用

this.$myHttp()替换uni.request即可。

 

标签:uniapp,请求,title,url,res,request,uni,options
From: https://www.cnblogs.com/virtualman/p/16883831.html

相关文章

  • Unix/Linux系统编程第十三章学习笔记
    第十三章TCP/IP和网络13.2TCP协议TCP/IP(Comer1988,2001;RFC11801991)是互联网的基础。TCP代表传输控制协议。IP代表互联网协议。目前有两个版本的IP,即IPv4和IPv6。IPv4使......
  • Unity之"诡异"的协程
    为什么说是诡异的协程呢?首先从一个案例说起吧,示例如下:游戏目标:让小车进入到对应颜色屋子里,即可获得一分。(转弯的道路可控) 为了让小车能够平滑转弯,小车的前进方向需要......
  • Typescript类型体操 - Unique
    题目中文实现类型的Lodash.uniq,Unique接受数组T,返回没有重复值的数组TEnglishImplementthetypeversionofLodash.uniq,UniquetakesanArrayT,returns......
  • 15.requests进阶
    requests图片下载post请求sessionrequests下载图片下载图片,需获取到图片的url地址和图片名称,通过向图片url发起请求,之后获取.content注意:.text返回的是Unicode型......
  • MySQL union 和 order by 同时使用
    目录一、出现错误的情况二、解决上述问题的两种方法三、案例分析:求解:常见的错误解法(1)使用union和多个orderby不加括号【报错】(2)orderby在union子句中不起作用正......
  • 封装一个request请求
    代码如下:importjsonimportrequestsfromloguruimportloggerclassHttpRequests:def__init__(self):#实例化一个session类self.s=req......
  • SpringMVC-解析@RequestParam参数
    InvocableHandlerMethod.invokeForRequest执行请求时会调用InvocableHandlerMethod.getMethodArgumentValues解析方法参数。InvocableHandlerMethod.getMethodArgumentVal......
  • unity3d修改对象属性
    unity3d修改对象属性 #regionvoidloadWorkerModel(Vector3init_position,stringworker_name,stringBDID){GameObjectobj=(GameObject)......
  • uniapp之uni-starter小程序多端研发框架搭建与项目实践
    随着移动互联网的飞速发展,无数移动APP琳琅满目;在移动App的发展的基础上,衍生了小程序、轻应用技术,它随时可用,但又无需安装卸载。小程序是一种不需要下载安装即可使用的应用,......
  • GB2312、GB18030、GBK、UNICODE、B…
    1, 常用字符集分类ASCII及其扩展字符集作用:表语英语及西欧语言。位数:ASCII是用7位表示的,能表示128个字符;其扩展使用8位表示,表示256个字符。范围:ASCII从00到7F,扩展从00到FF。......