uniapp请求封装入门级实战记录

     简单记录一下uniapp请求进行封装的相关内容,方便以后查看!
     1.目录结构
     2.封装文件
     2.1 全局公共方法封装
     2.2 请求方法封装
     2.3 项目请求路径封装
     2.4 常用变量封装
     2.5 页面使用

1.目录结构

    项目根目录下创建common文件夹,包含内容:
        全局公共方法封装 commonMethod.js
        请求方法封装 packageMethod.js
        项目请求路径封装 httpApi.js
        常用变量封装 config.js
    不清楚文件内容的可以继续往下看.

2.1 全局公共方法封装

    这里主要是封装一下常用的方法

/**
 * 页面跳转
 * @author txm
 * 
 * @param {String} url 需要跳转的页面的路径
 */
const goTo = (url) => {
	uni.navigateTo({
		url:url
		})
}

/**
 * index页面跳转
 * @author txm
 * 
 * @param {String} url 需要跳转的index页面的路径
 */
const goToIndex = (url) => {
	uni.switchTab({
		url,
		success: function (res) {
			console.log(res)
		},
		fail: function (e) {
			console.log(e)
		}
	})
}
/**
 * 消息弹窗
 * @author txm
 * 
 * @param {String} title 标题
 * @param {Number} duration 窗口动画持续时间,单位为 ms
 * @param {String} icon 
 */
const showMsg=(title,icon='none',duration=1500)=>{
	uni.showToast({
	    title,
	    duration,
			icon
	});
}
/**
 * 显示加载中
 * @author txm
 * 
 */
const showLoading=()=>{
	uni.showLoading({
			title: '加载中',
			mask: true
		})
}
/**
 * 取消加载中
 * @author txm
 * 
 */
const hideLoading=()=>{
	uni.hideLoading();
}


//注册定义的方法
export const commonMethod={
	goTo,
	goToIndex,
	showMsg,
	showLoading,
	hideLoading
}

    main.js中注册全局公共方法

// 全局自定义方法  Vue.prototype:使用范围是每个vue实例中可用
import {commonMethod} from './common/commonMethod.js'
Vue.prototype.$commonMethod=commonMethod

2.2 请求方法封装

    这里是对常用的rest请求进行封装

import {commonMethod} from '@/common/commonMethod.js'
import config from '@/common/config.js'
// 服务器路径
const serverUrl = config.serverUrl; 
// 用户token
// const token = uni.getStorageSync('token'); // 启动,配置文件全局加载一次,会出现token为空情况

// post请求封装
function postRequest(url, data, contentType,needsToken) {
	var promise = new Promise((resolve, reject) => {
		// 显示加载中
		commonMethod.showLoading()
		uni.request({
			url: serverUrl + url,
			data: data,
			method: 'POST',
			timeout: 100000,
			header: {
				'content-type': contentType || 'application/json',
				'token': needsToken && uni.getStorageSync('token')
			},
			success: function(res){ 
				console.log('success:res',JSON.stringify(res))
				commonMethod.hideLoading();
				if (res.data.code == 200) {
					 resolve(res.data.data);
				}else{  // 非正常接口返回按照回调失败处理,方法中使用catch进行捕获显示到页面
					reject(res.data);
				}
			},
			fail: function(e) {
				console.log('fail:e',JSON.stringify(e))
				commonMethod.hideLoading(); 
				reject('网络错误');
			}
		})
	});
	return promise;
}

// get请求封装
function getRequest(url, data,contentType,needsToken) {
	var promise = new Promise((resolve, reject) =>{
		// 显示加载中
		commonMethod.showLoading()
		uni.request({
			url: serverUrl + url,
			data: data,
			method: 'GET',
			timeout: 100000,
			header: {
				'content-type': contentType || 'application/json',
				'token': needsToken && uni.getStorageSync('token')
			},
			success: function(res){ 
				commonMethod.hideLoading();
				if (res.data.code == 200) {
					 resolve(res.data.data);
				}else{  // 非正常接口返回按照回调失败处理,方法中使用catch进行捕获显示到页面
					reject(res.data);
				}
			},
			fail: function(e) {
				console.log('fail:e',JSON.stringify(e))
				commonMethod.hideLoading(); 
				reject('网络错误');
			}
		})
	});
	return promise;
}

//put请求封装
function putRequest(url,data,contentType,needsToken){
	var promise = new Promise((resolve,reject) => {
			// 显示加载中
			commonMethod.showLoading()
			uni.request({
				url:serverUrl + url,
				data:data,
				method:"PUT",
				header:{
					'content-type':contentType || 'application/json',
					'token': needsToken && uni.getStorageSync('token')
					},
				success:function(res){
					commonMethod.hideLoading();
					if (res.data.code == 200) {
						 resolve(res.data.data);
					}else{  // 非正常接口返回按照回调失败处理,方法中使用catch进行捕获显示到页面
						reject(res.data);
					}
				},
				fail:function(e){
					console.log('fail:e',JSON.stringify(e))
					commonMethod.hideLoading(); 
					reject('网络错误');
				}
			});
	});
	return promise;
}
//del请求封装
function delRequest(url,data,contentType,needsToken){
	var promise = new Promise((resolve,reject) => {
			// 显示加载中
			commonMethod.showLoading()
			uni.request({
				url:commoneUrl + url,
				data:data,
				method:"DELETE",
				header:{
					'content-type': contentType || 'application/json',
					'token': needsToken && uni.getStorageSync('token')
					},
				success:function(res){
					commonMethod.hideLoading();
					if (res.data.code == 200) {
						 resolve(res.data.data);
					}else{  // 非正常接口返回按照回调失败处理,方法中使用catch进行捕获显示到页面
						reject(res.data);
					}
				},
				fail:function(e){
					console.log('fail:e',JSON.stringify(e))
					commonMethod.hideLoading(); 
					reject('网络错误');
				}
			});
	});
	return promise;
}


module.exports = {
	postRequest,
	getRequest,
	putRequest,
	delRequest
}

2.3 项目请求路径封装

    这里对服务端的请求路径进行封装

var packageMethod = require('./packageMethod.js'); 

// 绑定用户公众号openid post表单传参,不需要传递token
export function apiA(data) {
  return packageMethod.postRequest("/user/apiA", data,"application/x-www-form-urlencoded",false);
}

// 测试:post请求体传参,需要传递token
export function apiB(data) {
  return packageMethod.postRequest("/user/apiB", data,'',true);
}

// 测试:get请求体传参,需要传递token
export function apiC(data) {
  return packageMethod.getRequest("/user/apiC", data,'',true);
}

2.4 常用变量封装

    这是对常用的变量进行封装

 export default{
   serverUrl:"https://127.0.0.1:8081",
   notifyUrl:'http://fjj4qd.natappfree.cc/demo1/#/pages/notice/notice',
  }

2.5 页面使用

    方法使用举例,简单列一下常用的post表单传参、post请求体传参、get请求。

<template>
	<view class="content">
		<image class="logo" src="/static/logo.png"></image>
		<view class="text-area">
			<text class="title">{{title}}</text>
		</view>
	</view>
</template>

<script>
	import configInfo from '@/common/config.js'
	import {
		apiA,apiB,apiC
	} from '../../common/httpApi.js';
	export default {
		data() {
			return {
				title: 'Hello'
			}
		},
		onLoad() {
		},
		methods: {
			serverApiC(){
				apiC({
					'a': "123",
					'b': 5
				}).then(response => {
					console.log("response",response)
				}).catch((data) => {
					this.$commonMethod.showMsg(JSON.stringify(data.msg))
				})
			},
			serverApiB(){
				apiB({
					'userId': "123",
					'contentText': "5",
					'contentImg': "8",
				}).then(response => {
					console.log("response",response)
				}).catch((data) => {
					this.$commonMethod.showMsg(JSON.stringify(data.msg))
				})
			},
			serverApiA(){
				apiA({
					'gzhCode': "123"
				}).then(response => {
					console.log("response",response)
				}).catch((data) => {
					this.$commonMethod.showMsg(JSON.stringify(data.msg))
				})
			}
		}
	}
</script>

<style>
</style>

    以上是对uniapp请求的封装记录过程,如果感觉有帮助欢迎点赞收藏!
    最近参与了一个匿名社交的小程序,感兴趣的可以看一下!
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Uniapp 是一个跨平台的开发框架,可以同时开发小程序、H5、App 等多个平台的应用。在 Uniapp 中,可以使用原生的 API 进行网络请求,也可以使用第三方库进行封装。 以下是一个简单的 Uniapp 网络请求封装示例: 1. 创建一个请求封装的文件,例如 `api.js`: ```javascript // 导入需要的模块 import request from 'uni-request'; // 设置请求的基本配置 request.defaults.baseURL = 'http://api.example.com'; request.defaults.headers.common['Authorization'] = 'Bearer token'; // 封装 GET 请求方法 export function get(url, params) { return new Promise((resolve, reject) => { request.get(url, { params }) .then(response => { resolve(response.data); }) .catch(error => { reject(error); }); }); } // 封装 POST 请求方法 export function post(url, data) { return new Promise((resolve, reject) => { request.post(url, data) .then(response => { resolve(response.data); }) .catch(error => { reject(error); }); }); } ``` 2. 在需要使用网络请求的页面中,导入 `api.js` 文件并调用相应的方法: ```javascript import { get, post } from '@/api.js'; // 使用 GET 请求 get('/api/users', { page: 1 }) .then(data => { console.log(data); }) .catch(error => { console.error(error); }); // 使用 POST 请求 post('/api/login', { username: 'admin', password: '123456' }) .then(data => { console.log(data); }) .catch(error => { console.error(error); }); ``` 这样就可以在 Uniapp 中进行网络请求封装和调用了。封装请求的好处是可以统一处理请求的配置、错误处理等,方便管理和维护。当然,具体的封装方式可以根据项目需求进行适当的调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卖柴火的小伙子

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值