uni-app(二)接口请求封装,全局输出api
- 在项目 main.js 同级创建 utils 文件夹,
- utils里创建 config.js文件,存储重要参数
// 获取平台信息
const {
system,
} = uni.getSystemInfoSync() // 请求服务器环境,xxx 在这里是填充,请自行替换
let baseUrl = ['http://xxx', 'https://xxx'] // 小程序重要参数
uni.config = {
platform: system.startsWith("iOS") ? 2 : 1, // IOS为2 安卓为1
imgUrl: "https://xxx", // 图片地址前缀
baseUrl: baseUrl[1],
appid: "xxx", // appid
} - utils里创建request.js文件,封装接口请求
// 登录接口域名
const LOGIN_URL = '/xx/xx'
const {
baseUrl,
appid
} = uni.config // 封装接口请求
uni.http = (args = {}) => {
let url = args.url || ''
let data = args.data || {}
data.appid = appid
let method = args.method || 'GET'
return new Promise((resolve, reject) => {
request(url, data, method, resolve, reject)
})
} // 接口封装
const request = async (url, data = {}, method, resolve, reject) => {
let token = await getToken()
let header = {
'content-type': 'application/x-www-form-urlencoded',
'token': token
}
uni.request({
header,
url: baseUrl + url,
method,
data,
dataType: 'json',
success: res => {
if (res.statusCode == 200) {
let code = res.data.return
if (code == 0) {
resolve(res.data)
} else {
uni.showModal({
title: '错误码:' + code,
content: res.data.result
})
}
}
},
fail: err => {
reject(err)
}
})
} // 获取Token
const getToken = async () => {
let token = uni.getStorageSync('token')
if (token) {
return token
} else {
let tokenRes = await login()
return tokenRes.data.token
}
} // 封装登录
const login = () => {
return new Promise((resolve, reject) => {
uni.getProvider({
service: "oauth",
success(providerRes) {
let provider = providerRes.provider[0]
uni.login({
provider,
success: (codeRes) => {
uni.request({
url: baseUrl + LOGIN_URL,
method: 'POST',
header: {
'content-type': 'application/x-www-form-urlencoded',
appid
},
data: {
code: codeRes.code
},
dataType: 'json',
success: (res) => {
if (res && res.statusCode == 200) {
// 存储用户信息
uni.setStorageSync('status', res.data.data)
// 存储用户token
uni.setStorageSync('token', res.data.token)
resolve(res.data)
} else {
reject(res)
}
},
fail: (err) => {
reject(err)
}
})
},
fail: (err) => {
reject(err)
}
})
}
})
})
} - utils里创建 api.js文件,整理页面需要的请求,输出api
// 这里举个例子,实际结合自己使用场景
// 获取列表
let getList = function(data) {
return await uni.http({
url: "/xxx/xxx",
data,
method: "POST"
})
} // 全局输出
uni.service = {
getList
} - main.js 引入文件
// 顺序引入,负责参数会访问不到 import '@/utils/config'
import '@/utils/request'
import '@/utils/api' - 使用
methods: {
async getList() {
let obj = {
// 参数
}
let res = await uni.service.getList(obj)
if (res.return == 0) {
// 成功操作
}
}
}好了,你学废了吗,下期整理 uni-app 的其他内容,期待你的带来
uni-app(二)接口请求封装,全局输出api的更多相关文章
- 微信小程序request(ajax)接口请求封装
微信小程序request(ajax)接口请求封装 最近在进行小程序的编写,需要调用后端接口,经常要用到wx.request方法,所以就自己封装了一下,简化一下代码,如果能给大家提供帮助更好,在封装的时 ...
- 微信小程序HTTP接口请求封装
1.方法封装(新建文件夹util,工具文件,在文件夹下创建request.js文件,用于对方法封装)request.js: var app = getApp(); //项目URL相同部分,减轻代码量, ...
- MOOC(7)- case依赖、读取json配置文件进行多个接口请求-封装mock(9)
封装mock # -*- coding: utf-8 -*- # @Time : 2020/2/12 8:51 # @File : mock_demo_9.py # @Author: Hero Liu ...
- app登录接口请求报:“签名验证失败”???已解决
根据抓包数据获得url.param.header,在charles中compose请求结果为成功,在pycharm中运行则报:“签名验证失败”. 运行结果:
- 简单的基于Vue-axios请求封装
具体实现思路=>封装之前需要用npm安装并引入axios,使用一个单独的js模块作为接口请输出对象,然后export dafult 这个对象. 1.首先我们需要在Vue实例的原型prototyp ...
- uni-app 环境配置,uni.request封装,接口配置,全局配置,接口调用的封装
1.环境配置 (可参考uni-官网的环境配置) common文件夹下新建config.js let url_config = "" if(process.env.NODE_ENV ...
- 【uni-app】uni.request二次封装,更好的管理api接口和使用
前言 之前写了一个Vue.js的axios二次封装(点击跳转),这次是uni-app,uni-app是基于vue.js框架的,我觉得是很好用的一个框架,而且一套代码编译那么多平台,非常节省成本,当然, ...
- Flutter 实际开发常用工具类(全局提示,请求封装,token缓存,验证码倒计时、常用窗帘动画及布局)
介绍: 一星期从入门到实际开发经验分享及总结 代码传送门github Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面.未来App开发 ...
- python自动化--接口请求及封装
基于http协议,最常用的是GET和POST两种方法. 接口文档需要包含哪些信息: 接口名称接口功能接口地址支持格式 json/xml请求方式请求示例请求参数(是否必填.数据类型.传递参数格式)返回参 ...
随机推荐
- MiniSMB 网络性能测试 免费版本安装指南
1) 烧录Image至USB 在Linux环境下可以运行以下命令(假设usb设备符号为/dev/sdb): root# tar -Jxf minismb-free-edition.img.tar.xz ...
- M1 MacBook安装Homebrew
在装载M1芯片的MacBook产品上,默认是不带有homebrew这款包管理工具的,具体原因官方解释为适配问题,原有的homebrew无法与silicon Mac机型匹配.但是这并不意味着我们不可以在 ...
- vs2019 写入访问权限冲突
先说句题外话 vs反应有时候有点慢,改过的地方等几秒才会显示正确 另外有时候正确的地方会报错,重启吧 回到正题 "引发了异常: 写入访问权限冲突._Left 是 0xCDCDCDCD.如有适 ...
- 334A Candy Bags
A. Candy Bags time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- you don't know github
you don't know GitHub <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- JavaScript 设计模式: 发布者-订阅者模式
JavaScript 设计模式: 发布者-订阅者模式 发布者-订阅者模式 https://github.com/Kelichao/javascript.basics/issues/22 https:/ ...
- Virtual Reality In Action
Virtual Reality In Action VR WebXR immersive 沉浸式 https://github.com/immersive-web/webxr https://imme ...
- java的单例模式小知识点
单例模式 目的 为了让一个类有且仅有一个实例 优点 只允许一个,节省空间 不用频繁创建删除,提高性能 缺点 不容易扩展 长期不使用会被系统当作垃圾回收,造成系统状态的丢失 实现 要点 防止外界随意的创 ...
- django学习-1.开始hello world!
1.前言 当你想走上测试开发之路,用python开发出一个web页面的时候,需要找一个支持python语言的web框架.django框架有丰富的文档和学习资料,也是非常成熟的web开发框架,想学pyt ...
- Vue3组件(九)Vue + element-Plus + json = 动态渲染的表单控件
一个成熟的表单 表单表单,你已经长大了,你要学会: 动态渲染 支持单列.双列.多列 支持调整布局 支持表单验证 支持调整排列(显示)顺序 依据组件值显示需要的组件 支持 item 扩展组件 可以自动创 ...