uni-app调取接口的3种方式以及封装uni.request()详解

目录
  • 一、uni-app中调取接口的三种方式
    • 1、uni.request({})
    • 2、uni.request({}).then()
    • 3、async/await
  • 二、封装uni.request();
    • 1、创建一个对象,将该对象挂在Vue的原型下
    • 2、进入main.js文件
    • 3、在页面中调用
  • uni-app 封装接口request请求
    • 第一步、根目录下新建 config.js 文件
    • 第二步、根目录下新建 utils/http.js 文件
    • 第三步、 创建model 层 根目录下新建 models/index.js 文件
    • 第四步、页面中调用
  • 总结

一、uni-app中调取接口的三种方式

1、uni.request({})

uni.request({
	url:'/api/getIndexCarousel.jsp',
	method:'get',
	success:res=>{
		console.log(res.data);
		this.carouselData = res.data
	}
})

2、uni.request({}).then()

uni.request({
	url:'/api/getIndexCarousel.jsp',
	method:'get',
}).then((result)=>{
	let [error,res] = result;
	//result将返回一个数组[error,{NativeData}]
	//NativeData:调取接口后返回的原生数据
	if(res.statusCode === 200){
		this.carouselData = res.data
	}
	if(res.statusCode === 404){
		console.log('请求的接口没有找到');
	}
})
 

3、async/await

async:用在函数定义的前面
async request(){    //函数体;}
await:用在标明了async关键字的函数内部,异步操作的前面。

onLoad() {
	this.request();
},
methods: {
	async request(){
		let result = await uni.request({
			url:'/api/getIndexCarousel.jsp'
		})
		console.log(result)
		let [err,res] = result;
		if(res.statusCode === 200){
			this.carouselData = res.data;
		}
	}
}

二、封装uni.request();

1、创建一个对象,将该对象挂在Vue的原型下

新建@/common/request.js文件

初步写法(仅供参考):

export default {
	request(options){
		uni.request({
			...options,
			success:res=>{
				console.log(res)
			}
		})
	},
	get(url,data={},options={}){
		options.url=url,
		options.data=data,
		options.method='get',
		this.request(options)
	},
	post(url,data={},options={}){
		options.url=url,
		options.data=data,
		options.method='post',
		this.request(options)
	}
}

二次更改:

export default{
	//封装uni.request():
	request(options){
		return new Promise((resolve,reject)=>{
			//书写异步操作的代码
			uni.request({
				...options,
				success:res=>{
					if(options.native){
						resolve(res)	//调取接口后返回的原生数据
					}
					if(res.statusCode === 200){
						resolve(res.data)	//异步操作执行成功
					}else{
						console.log('请求的接口没有找到');
						reject(res) 	//异步操作执行失败
					}
				}
			})
		})
	},
	get(url,data={},options={}){
		options.url=url;
		options.data=data;
		options.method='get';
		return this.request(options)
	},
	post(url,data={},options={}){
		options.url=url;
		options.data=data;
		options.method='post';
		return this.request(options)
	}

}

2、进入main.js文件

import request from '@/common/request.js';
Vue.prototype.$Z = request;

例:在任意文件中书写下列代码可以调用。this.$Z.get();

3、在页面中调用

//封装uni.request():
this.$Z.get('/api/getIndexCarousel.jsp',{},{
	native:false
}).then(res=>{
	//异步操作成功
	console.log(res)
}).catch(res=>{
	//异步操作失败
	console.log(res)
}).finally(res=>{
	//异步操作完成
});

uniapp的网络请求方法

uni.request({
    url: 'https://www.example.com/request', //仅为示例,并非真实接口地址。
    data: {
        name: 'name',
        age: 18
    },
    header: {
        'custom-header': 'hello' //自定义请求头信息
    },
    success: function (res) {
        console.log(res.data);
    }
});

uniapp网络请求的get和post

  • 对于 GET 方法,会将数据转换为 query string。例如 { name: ‘name’, age: 18 } 转换后的结果是 name=name&age=18。
  • 对于 POST 方法且 header[‘content-type’] 为 application/json 的数据,会进行 JSON 序列化。
  • 对于 POST 方法且 header[‘content-type’] 为 application/x-www-form-urlencoded 的数据,会将数据转换为 query string。

请求的 header 中 content-type 默认为 application/json

注意 post请求必须加header[‘content-type’]

uni-app 封装接口request请求

我们知道一个项目中对于前期架构的搭建工作对于后期的制作有多么重要,所以不管做什么项目我们拿到需求后一定要认真的分析一下,要和产品以及后台沟通好,其中尤为重要的一个环节莫过于封装接口请求了。因为前期封装好了,后面我们真的可以实现粘贴复制了。所以今天给大家分享一个在uni-app中如何封装一个request请求。

第一步、根目录下新建 config.js 文件

const config = {
base_url: '这里可以是生产环境或者测试环境'
}
export { config }

这里主要配置接口的基本路径

第二步、根目录下新建 utils/http.js 文件

import {
	config
} from '../config.js'

export const apiResquest = (prams) => { //prams 为我们需要调用的接口API的参数 下面会贴具体代码

	// 判断请求类型
	let headerData = {
		'content-type': 'application/json'
	}

	let dataObj = null
        //因为我们的GET和POST请求结构不同这里我们做处理,大家根据自己后台接口所需结构灵活做调整吧
	if (prams.method === "GET") {
		headerData = {
			'content-type': 'application/json',
			'token': uni.getStorageSync('token')
		}
	} else {
		dataObj = {
			'data': prams.query,
			'token': uni.getStorageSync('token')
		}
	}
	return new Promise((resolve, reject) => {
		let url = config.base_url + prams.url; //请求的网络地址和局地的api地址组合
		uni.showLoading({
			title: '加载中',
			mask: true
		})
		return uni.request({
			url: url,
			data: dataObj,
			method: prams.method,
			header: headerData,
			success: (res) => {
				uni.hideLoading()
                                //这里是成功的返回码,大家根据自己的实际情况调整
				if (res.data.code !== '00000') {
					uni.showToast({
						title: '获取数据失败:' + res.data.msg,
						duration: 1000,
						icon: "none"
					})
					return;
				}
				resolve(res.data);
				console.log(res.data)
			},
			fail: (err) => {
				reject(err);
				console.log(err)
				uni.hideLoading()
			},
			complete: () => {
				console.log('请求完成')
				uni.hideLoading()
			}
		});
	})
}

第三步、 创建model 层 根目录下新建 models/index.js 文件

——-️注意: 这里可以根据自己的项目功能需求分解models 层——-

import { apiResquest } from '../utils/http.js'

//POST 请求案例

export const login = (query) => {
	return apiResquest({
		url: '这里是API的地址',
		method: 'POST',
		query: {...query}
	})
}

//GET 请求案例可以传递参数也可以不传递
export const validateCode  = (query) => {
	let str = query
	return apiResquest({
		url: `您的API地址 ?${str}`,
		method: 'GET'
	})
}

第四步、页面中调用

import { login } from '../../models/index.js'
//页面中的 methods 里面就可以直接调用了
Login(){
        //这里可以设置需要传递的参数
	let uid = uni.getStorageSync('userId')
	login(uid).then((res) => {
		console.log(res)
	}).catch(err => {
		console.log(err)
	})
}

以上代码就是完整的接口封装了,真的超级实用,其实网上有很多关于uni-app接口封装的案例,但是个人感觉亲测了好几种,这种是最好用的。分享在这里希望和大家一起交流。

总结

到此这篇关于uni-app调取接口的3种方式以及封装uni.request()的文章就介绍到这了,更多相关uni-app调取接口及封装uni.request()内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 分析uniapp如何动态获取接口域名

    背景 接口域名没有写死,而是动态获取.具体实现就是 通过读取一个静态json文件,来设置真实的接口域名.好处是原域名有可能被封,这样可以直接后台操作修改该配置文件即可:不然的话,h5 项目可能还好说,app 的话必须重新发版. 代码 // httpService.js 对 uni.request 的封装. 在数据请求入口处,统一先进行 域名获取,即 执行 config.requestRemoteIp 方法 import config from '@/config' import Vue from

  • uni-app调取接口的3种方式以及封装uni.request()详解

    目录 一.uni-app中调取接口的三种方式 1.uni.request({}) 2.uni.request({}).then() 3.async/await 二.封装uni.request(); 1.创建一个对象,将该对象挂在Vue的原型下 2.进入main.js文件 3.在页面中调用 uni-app 封装接口request请求 第一步.根目录下新建 config.js 文件 第二步.根目录下新建 utils/http.js 文件 第三步. 创建model 层 根目录下新建 models/in

  • PHP三种方式实现链式操作详解

    在php中有很多字符串函数,例如要先过滤字符串收尾的空格,再求出其长度,一般的写法是: strlen(trim($str)) 如果要实现类似js中的链式操作,比如像下面这样应该怎么写? $str->trim()->strlen() 下面分别用三种方式来实现: 方法一.使用魔法函数__call结合call_user_func来实现 思想:首先定义一个字符串类StringHelper,构造函数直接赋值value,然后链式调用trim()和strlen()函数,通过在调用的魔法函数__call()中

  • Go并发与锁的两种方式该如何提效详解

    目录 并发不安全的例子 互斥锁 读写锁 小结 总结 并发安全,就是多个并发体在同一段时间内访问同一个共享数据,共享数据能被正确处理. 很多语言的并发编程很容易在同时修改某个变量的时候,因为操作不是原子的,而出现错误计算,比如一个加法运算使用中的变量被修改,而导致计算结果出错,典型的像统计商品库存. 个人建议只要涉及到共享变量统统使用channel,因为channel源码中使用了互斥锁,它是并发安全的. 我们可以不用,但不可以不了解,手中有粮心中不慌. 并发不安全的例子 数组是并发不安全的,在例子

  • python调用接口的4种方式代码实例

    这篇文章主要介绍了python调用接口的4种方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python中调用API的几种方式: - urllib2 - httplib2 - pycurl - requests 1.urllib2 import urllib2, urllib github_url = 'https://api.github.com/user/repos' password_manager = urllib2.HTT

  • mapper接口注入两种方式详解

    这篇文章主要介绍了mapper接口注入两种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.使用模板方式: <!--使用模板类实现mybatis --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFacto

  • Android Studio进行APP图标更改的两种方式总结

    百度了许多相关资料,对两种修改app图标的方式进行总结: 第一种:(最简单的方法) 将你准备好的 图标放入res目录下的drawable,在AndroidManifest.xml文件中,找到android:icon以及android:roundIcon这两个属性,设置为你放入的图标文件. 如图,appicon就是我准备替换的文件.注意保存时,保存名称不能有大写字母与空格,否则编译时会报错,此外,查到的资料中图片格式建议保存为.png.不过自己试验过.jpg与.png都是可以正确替换图标的. 在这

  • Python调用REST API接口的几种方式汇总

    相信做过自动化运维的同学都用过REST API接口来完成某些动作.API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课. 本文主要介绍python中调用REST API的几种方式,下面是python中会用到的库. - urllib2 - httplib2 - pycurl - requests urllib2 - Sample1 import urllib2, urllib github_url = 'https://api.github.com/user/re

  • Springboot打印接口的三种方式分享

    目录 1 aop切面的方式 1.1 实现思路 1.2 代码实现 1.3 功能测试 2 过滤器的方式 3 拦截器的方式 1 aop切面的方式 1.1 实现思路 引入aop依赖 自定义注解 定义切面,采用环绕通知 1.2 代码实现 1)引入依赖 xml <!--aop--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-

  • MyBatis注解方式之@Update/@Delete使用详解

    @Update 1. RoleMapper接口增加接口方法 /** * * * @Title: updateSysRoleById * * @Description: updateSysRoleById * * @param sysRole * @return * * @return: int */ @Update({ "update sys_role set role_name = #{roleName},enabled = #{enabled},create_by = #{createBy}

  • Spring IOC xml方式进行工厂Bean操作详解

    spring中有两种Bean 第一种 普通 Bean 就是我们在配置文件中 定义的类对象 创建bean 并定义相关的id和声明类对象 普通bean的特点在于 在配置文件中定义的类型 也就是返回类型 就比如 你定义的是一个 book类的类型 那你这个bean返回的 也比如是个book类型的对象 第二种 是在工厂类中统一管理的工厂Bean 特点上 还是有比较大区别的 首先 工厂Bean 又叫FactoryBean 他定义的类型和返回类型是可以不一样的 通常作为一个工厂类 来管理bean对象操作 我们

随机推荐