uniapp封装request请求

avatar
作者
猴君
阅读量:3

第一步:在你的根文件下创建一个 request 的目录;然后在request文件下创建两个api.js和index.js

第二步封装接口:index .js中:(''https://xxxxx.xxxxx.cn'',改成自己的)

// 全局请求封装 const base_url = 'https://xxxxx.xxxxx.cn' // 请求超出时间 const timeout = 5000   // 需要修改token,和根据实际修改请求头 export default (params) => { 	let url = params.url; 	let method = params.method || "get"; 	let data = params.data || {}; 	let header = { 		'Blade-Auth': uni.getStorageSync('token') || '', 		'Content-Type': 'application/json;charset=UTF-8', 		'Authorization': 'Basic c2FiZXI6c2FiZXJfc2VjcmV0', 		'Tenant-Id': uni.getStorageSync('tenantId') || 'xxx', // avue配置相关 		...params.header 	} 	if (method == "post") { 		header = { 			'Content-Type': 'application/json' 		}; 	} 	return new Promise((resolve, reject) => { 		uni.request({ 			url: base_url + url, 			method: method, 			header: header, 			data: data,             timeout, 			success(response) { 				const res = response 				// 根据返回的状态码做出对应的操作 				//获取成功 				// console.log(res.statusCode); 				if (res.statusCode == 200) { 					resolve(res.data); 				} else { 					uni.clearStorageSync() 					switch (res.statusCode) { 						case 401: 							uni.showModal({ 								title: "提示", 								content: "请登录", 								showCancel: false, 								success() { 									setTimeout(() => { 										uni.navigateTo({ 											url: "/pages/login/index", 										}) 									}, 1000); 								}, 							}); 							break; 						case 404: 							uni.showToast({ 								title: '请求地址不存在...', 								duration: 2000, 							}) 							break; 						default: 							uni.showToast({ 								title: '请重试...', 								duration: 2000, 							}) 							break; 					} 				} 			}, 			fail(err) { 				console.log(err) 				if (err.errMsg.indexOf('request:fail') !== -1) { 					uni.showToast({ 						title: '网络异常', 						icon: "error", 						duration: 2000 					}) 				} else { 					uni.showToast({ 						title: '未知异常', 						duration: 2000 					}) 				} 				reject(err);   			}, 			complete() { 				// 不管成功还是失败都会执行 				uni.hideLoading(); 				uni.hideToast(); 			} 		}); 	}).catch(() => {}); };

api.js中:(这两个是我自己的接口封装示例,改成自己的)

// 引入 request 文件 import request from './index.js'   // 获取学习列表详细信息登录 export const getLogin = ({ iphone, pwd }) => {   return request({     url: `/index.php/index/User/webLogin`,     method: 'post',     data: {       iphone,       pwd     }   }); }; // web用户的注册和修改接口 export const getZhuCe = ({ iphone, pwd ,webname}) => {   return request({     url: `/index.php/index/User/addWebuser`,     method: 'post',     data: {       iphone,       pwd, 	  webname     }   }); }; 

以下是我在页面中使用接口的示例代码

这是第一个接口里的使用实例代码:

<template> 	<view class=""> 		<image class="images" src="https://img.zcool.cn/community/013b625c91fd55a8012141680487b8.gif" mode=""></image> 		<text class="text1">欢迎登录</text> 		<view class="viewOne"> 			<image class="imageOne" src="../../static/BAvSeQLYg2ABWvaG3hAUBtUDc0ERjQ0IWp7bE6z4BfJAkiX0uDyl0AAAAASUVORK5CYII=.png" mode=""></image> 		<input class="itpOne" placeholder="请输入手机号" type="text" v-model="phoneNumber"> 		</view> 		<view class="viewTwo"> 			<image class="imageOne" src="../../static/AX30tZW6dLuCtAAAAAElFTkSuQmCC.png" mode=""></image> 		<input class="itpOne" placeholder="请输入密码" type="text" v-model="password"> 		</view> 		<button class="buttonss" @click="btn()">登 录</button> 		 <view class="viewThree"> 	 			<label> 				<checkbox /><text></text> 			</label> 我已阅读并同意<text class="text2">使用条款、隐私政策</text>和<text class="text2">使用规范</text> 		 </view>  	<navigator url="/pages/ZhuCe/ZhuCe" class="viewFour">没有账号?去注册</navigator> 	  	</view> </template>  <script> import { getLogin } from '@/request/api.js';  export default {   data() {     return {       phoneNumber: '',       password: ''     };   },   methods: {    btn() {        uni.showLoading({          title: '登录中...',          mask: true        });            getLogin({ iphone: this.phoneNumber, pwd: this.password }) 	   .then(res => { 	     uni.hideLoading(); 	   //   console.log('Response:', res); 	    	     let isLoginSuccess = false; 	     if ('webid' in res.data) { 	       isLoginSuccess = true; 	     } 	    	     if (isLoginSuccess) { 	       console.log('登录成功:', res.data); 	       uni.reLaunch({ 	         url: '/pages/index/index' 	       }); 	     } else { 	       console.error('登录失败,服务器返回:', res.data); 	       uni.showToast({ 	         title: res.data.webusername + ',登录失败', 	         icon: 'none' 	       }); 	     } 	   })               .catch(err => {            uni.hideLoading();            uni.showToast({              title: '网络错误,请检查您的网络设置',              icon: 'none'            });          });      }   },   mounted() {     // 页面加载时的初始化代码   } }; </script>

这是第二个接口里的使用实例代码:

<template> 	<view class=""> 		<image class="images" src="https://img.zcool.cn/community/01e8985ef31d5ea8012066212846ed.gif" mode=""></image> 		<text class="text1">欢迎注册</text> 		<view class="viewOne"> 			<image class="imageOne" src="/static/9hHG6FQ4vmAAAAAElFTkSuQmCC.png" mode=""></image> 		<input class="itpOne" placeholder="请输入用户名" type="text" v-model="webname"> 		</view> 		<view class="viewTwo"> 			<image class="imageOne" src="../../static/BAvSeQLYg2ABWvaG3hAUBtUDc0ERjQ0IWp7bE6z4BfJAkiX0uDyl0AAAAASUVORK5CYII=.png" mode=""></image> 		<input class="itpOne" placeholder="请输入手机号" type="text" v-model="iphone"> 		</view> 		<view class="viewTwo"> 			<image class="imageOne" src="../../static/AX30tZW6dLuCtAAAAAElFTkSuQmCC.png" mode=""></image> 		<input class="itpOne" placeholder="请输入密码" type="text" v-model="pwd"> 		</view> 		<button class="buttonss"  @click="zhuce">注 册</button> 		 <view class="viewThree"> 	 			<label> 				<checkbox /><text></text> 			</label> 我已阅读并同意<text class="text2">使用条款、隐私政策</text>和<text class="text2">使用规范</text> 		 </view>  	<navigator url="/pages/ShouYe/ShouYe" class="viewFour">已有账号?去登录</navigator> 	  	</view> </template>  <script> 	import { getZhuCe } from '@/request/api.js'; 	export default{ 		data(){ 			return{ 				webname: '', 							iphone: '', 							pwd: '' 			} 		}, 		methods:{ 			zhuce() { 			 			getZhuCe({ iphone: this.iphone, pwd: this.pwd, webname: this.webname }) 				.then(res => { 					if (res.data.code === 0) { 						uni.showToast({ 							title: '注册成功', 							icon: 'success' 						}); 						// 注册成功后,可以选择跳转到登录页面或首页 						uni.switchTab({ 							url: '/pages/ShouYe/ShouYe' 						}); 					}  				}) 				.catch(err => { 					uni.showToast({ 						title: '网络错误,请检查您的网络设置', 						icon: 'none' 					}); 				}); 		} 		} 	} </script>

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!