【uni-app】uni.request二次封装,更好的管理api接口和使用
前言
之前写了一个Vue.js的axios二次封装(点击跳转),这次是uni-app,uni-app是基于vue.js框架的,我觉得是很好用的一个框架,而且一套代码编译那么多平台,非常节省成本,当然,有好处肯定也有不好的地方,那就是坑。踩坑的地方很多(没踩过坑肯定是没有深入使用uni-app),如果有坑自己尝试了而没有办法处理,建议添加官方QQ群或者到官方论坛提问或者搜索。这次的封装跟axios没多大区别,也是异步请求,但是这个是直接把uni-app的自带API请求uni.request二次封装。
封装uni.request
在根目录下建一个api文件夹,起一个request.js,放入下面代码
const request = (config) => {
// 处理 apiUrl
config.url = '127.0.0.1/api' + config.url;
if(!config.data){
config.data = {};
}
console.log(JSON.stringify(config.data));
let promise = new Promise(function(resolve, reject) {
uni.request(config).then(responses => {
// 异常
if (responses[0]) {
reject({message : "网络超时"});
} else {
let response = responses[1].data; // 如果返回的结果是data.data的,嫌麻烦可以用这个,return res,这样只返回一个data
resolve(response);
}
}).catch(error => {
reject(error);
})
})
return promise;
};
export default request;
管理api
接下来继续在api文件夹下面创建一个login.js文件(如果api接口分类不需要分开的话就创建index.js,全部放一块,然后引入js,定义一个api,使用就以api.pwdlogin().then(res => {})方式)
PS:这里跟axios封装方式不一样,如果一个模块有多个请求(比如登录有密码登录,手机验证码登录等等),可以用以下方式,方便管理。
import request from '@/api/request'; // 引入封装好的request
// 密码登录
function pwdLogin (data) {
return request({
method: "POST", // 请求方式
url: 'login/pwd', // 请求url
data: data // 参数
})
}
// 手机登录
function phoneLogin (data) {
return request({
method: "POST", // 请求方式
url: 'login/phone', // 请求url
data: data // 参数
})
}
export default{
pwdLogin,
phoneLogin
}
使用api
import login from '@/api/login.js'; // 引入api
export default {
data() {
return {
phone: '', // 手机号码
password: '', // 密码
code: '', // 手机验证码
isPwdLogin: true // 是否使用密码登录
}
},
onShow() {
this.showInit();
},
methods: {
// 初始化
async showInit() {},
// 登录
handleToLogin() {
if (isPwdLogin) { // 使用密码登录
let pwdParams = {
phone: this.phone,
password: this.password
}
login.pwdLogin(pwdParams).then(res => {
if (res.code == 200) {
uni.showToast({
title: "登录成功",
icon: 'success'
})
}
}).catch(err => {
uni.showToast({
title: err.msg,
icon: 'none'
})
});
} else { // 使用手机验证码登录
let phoneParams = {
phone: this.phone,
code: this.code
}
login.phoneLogin(phoneParams).then(res => {
if (res.code === 200) {
uni.showToast({
title: "登录成功",
icon: 'success'
});
}
}).catch(err => {
uni.showToast({
title: err.msg,
icon: 'none'
})
});
}
}
}
}
以上就是这篇uni.request封装的所有内容了,看到这里的伙伴们如果有不明白的地方请留言哦,如果写的不好也可以留言吐槽!!!
总结
跟axios封装稍微有一点点变化,但是都很明显的,这个封装个人觉得是非常非常好用,然后就是uni-app的uni.request请求问题,这里要说明一下,如果遇到异步问题,请使用下面的方法:
import products from '@/api/products.js'
export default {
data() {
return {
productsList: []
}
},
onLoad() {
this.showInit();
},
methods: {
// 初始化
async showInit() {
await this.getProductsList();
},
// 获取产品列表
getProductsList() {
products.list().then(res => {
if (res.code == 200) {
this.productsList = res.data;
}
}).catch(err => {
uni.showToast({
title: err.msg,
icon: 'none'
})
});
}
}
}
这里用到了async + await,如果不明白这两个语法的意思和用处,请看 阮一峰的ES6教程,这里就不明说了。
原文链接:https://blog.langting.top/archives/93.html
【uni-app】uni.request二次封装,更好的管理api接口和使用的更多相关文章
- 【vue】axios二次封装,更好的管理api接口和使用
在现在的前端开发中,前后端分离开发比较主流,所以在封装方法和模块化上也是非常需要掌握的一门技巧.而axios的封装也是非常的多,下面的封装其实跟百度上搜出来的axios封装或者axios二次封装区别不 ...
- 【Vue】axios封装,更好的管理api接口和使用
在现在的前端开发中,前后端分离开发比较主流,所以在封装方法和模块化上也是非常需要掌握的一门技巧.而axios的封装也是非常的多,下面的封装其实跟百度上搜出来的axios封装或者axios二次封装区别不 ...
- APP自动化针对PO模式进行二次封装之basepage
APP自动化跟WEB自动化所使用的框架基本一样,都是采用的PO模式结合pytest框架编写自动化测试脚本,为了提高代码的复用性.稳定性和易维护性,我们针对PO模式进行了二次封装,将日志,等待以及异常截 ...
- uni app中使用自定义图标库
项目中难免会用到自定义图标,那在uni app中应该怎么使用呢? 首先, 将图标目录放在static资源目录下: 在main.js中引入就可以全局使用了 import '@/static/icon-o ...
- AFNetworking二次封装的那些事
AFNetworking可是iOS网络开发的神器,大大简便了操作.不过网络可是重中之重,不能只会用AFNetworking.我觉得网络开发首先要懂基本的理论,例如tcp/ip,http协议,之后要了解 ...
- 对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache
虽然jquery的较新的api已经很好用了, 但是在实际工作还是有做二次封装的必要,好处有:1,二次封装后的API更加简洁,更符合个人的使用习惯:2,可以对ajax操作做一些统一处理,比如追加随机数或 ...
- Android 应用程序集成FaceBook 登录及二次封装
1.首先在Facebook 开发者平台注册一个账号 https://developers.facebook.com/ 开发者后台 https://developers.facebook.com/ap ...
- volley二次封装
产品中使用Volley框架已有多时,本身已有良好封装的Volley确实给程序开发带来了很多便利与快捷.但随着产品功能的不断增加,服务器接口的不断复杂化,直接使用Volley原生的JSONObjectR ...
- pywinauto二次封装(pywinnat.py)
将pywinauto常用方法进行封装,使得pywinauto用起来更简单 #头文件的引入 from pywinauto import application from pywinauto import ...
随机推荐
- Jmeter执行多个sql查询语句
1.添加jdbc connection(注意标红部分) 2.添加jdbc request 3.查看结果树 本文主要向大家介绍了Oracle数据库之jmeter jdbc request 如何运行多个s ...
- 【QT】利用pyqt5实现简单界面
Topic: 利用pyqt5编写简单界面Env:win10 + Pycharm2018 + Python 3.6.8Date: 2019/4/29 by hw_Chen2018 ...
- 同步锁Lock & 生产者和消费者案例
显示锁 Lock ①在 Java 5.0 之前,协调共享对象的访问时可以使用的机 制只有 synchronized 和 volatile . Java 5.0 后增加了一些 新的机制,但并不是一种替代 ...
- PSR-4 的实现示例
闭包实例 <?php /** * 一个具体项目实现的示例. * * 在注册自动加载函数后,下面这行代码将引发程序 * 尝试从 /path/to/project/src/Baz/Qux.php * ...
- ActiveMQ 反序列化漏洞(CVE-2015-5254)复现
1.运行漏洞环境 sudo docker-compose up -d 环境运行后,将监听61616和8161两个端口.其中61616是工作端口,消息在这个端口进行传递:8161是Web管理页面端口.访 ...
- 关于react中antd design pro下面src/models
1.src/models 在 Ant Design Pro 中,一个完整的前端 UI 交互到服务端处理流程是这样的: 1.UI 组件交互操作: 2.调用 model 的 effect: 3.调用统一管 ...
- .net core 上传大文件
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Thr ...
- 题解 CF1348D 【Phoenix and Science】
题目大意,每天细菌会在早上选择分裂,晚上生长. 观察题目,我们可以发现.不管我们怎么分裂细菌,这一天晚上的总质量都是前一天晚上的总质量加上今天的细菌数. 那么我们肯定希望细菌分裂的越多越好,这样我们减 ...
- JUC : 并发编程工具类的使用
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.JUC是什么 1.JUC定义 JUC,即java.util.concurrent 在并发编程中使用的 ...
- Java实现 蓝桥杯 算法训练 字符串合并
试题 算法训练 字符串合并 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输入两个字符串,将其合并为一个字符串后输出. 输入格式 输入两个字符串 输出格式 输出合并后的字符串 样例 ...