• 在项目 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的更多相关文章

  1. 微信小程序request(ajax)接口请求封装

    微信小程序request(ajax)接口请求封装 最近在进行小程序的编写,需要调用后端接口,经常要用到wx.request方法,所以就自己封装了一下,简化一下代码,如果能给大家提供帮助更好,在封装的时 ...

  2. 微信小程序HTTP接口请求封装

    1.方法封装(新建文件夹util,工具文件,在文件夹下创建request.js文件,用于对方法封装)request.js: var app = getApp(); //项目URL相同部分,减轻代码量, ...

  3. MOOC(7)- case依赖、读取json配置文件进行多个接口请求-封装mock(9)

    封装mock # -*- coding: utf-8 -*- # @Time : 2020/2/12 8:51 # @File : mock_demo_9.py # @Author: Hero Liu ...

  4. app登录接口请求报:“签名验证失败”???已解决

    根据抓包数据获得url.param.header,在charles中compose请求结果为成功,在pycharm中运行则报:“签名验证失败”. 运行结果:

  5. 简单的基于Vue-axios请求封装

    具体实现思路=>封装之前需要用npm安装并引入axios,使用一个单独的js模块作为接口请输出对象,然后export dafult 这个对象. 1.首先我们需要在Vue实例的原型prototyp ...

  6. uni-app 环境配置,uni.request封装,接口配置,全局配置,接口调用的封装

    1.环境配置 (可参考uni-官网的环境配置) common文件夹下新建config.js let url_config = "" if(process.env.NODE_ENV ...

  7. 【uni-app】uni.request二次封装,更好的管理api接口和使用

    前言 之前写了一个Vue.js的axios二次封装(点击跳转),这次是uni-app,uni-app是基于vue.js框架的,我觉得是很好用的一个框架,而且一套代码编译那么多平台,非常节省成本,当然, ...

  8. Flutter 实际开发常用工具类(全局提示,请求封装,token缓存,验证码倒计时、常用窗帘动画及布局)

    介绍: 一星期从入门到实际开发经验分享及总结           代码传送门github Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面.未来App开发 ...

  9. python自动化--接口请求及封装

    基于http协议,最常用的是GET和POST两种方法. 接口文档需要包含哪些信息: 接口名称接口功能接口地址支持格式 json/xml请求方式请求示例请求参数(是否必填.数据类型.传递参数格式)返回参 ...

随机推荐

  1. Spring:解决因@Async引起的循环依赖报错

    最近项目中使用@Async注解在方法上引起了循环依赖报错: org.springframework.beans.factory.BeanCurrentlyInCreationException: Er ...

  2. C# 数据类型(3)

    动态类型 dynamic types 动态类型是后来引进的,他其实是一个static type,但是不像其他的静态类型,编译器不会检查你到底是啥类型(也不会检查你能不能去call某个'method') ...

  3. JVM实战篇

    1.1 JVM参数 1.1.1 标准参数 -version -help -server -cp 1.1.2 -X参数 非标准参数,也就是在JDK各个版本中可能会变动 -Xint 解释执行 -Xcomp ...

  4. AbstractQueuedSynchronizer的使用和juc里的相关类的解析

    对AQS进行解析后,先来实现两个简单的基于AQS的类,然后再解析juc里基于AQS构造的类. 1.基于AQS的类的示例 首先先看这个类,这个类是<Java并发编程实战>的一个示例,AQS源 ...

  5. Apple iOS 触控按钮 自动关闭 bug

    Apple iOS 触控按钮 自动关闭 bug bug 轻点 iPhone 背面可执行操作 您可以轻点两下或轻点三下 iPhone 背面以执行某些操作,如向上或向下滚动.截屏.打开"控制中心 ...

  6. bash variables plus operator All In One

    bash variables plus operator All In One Errors missing pass params #!/usr/bin/env bash # echo emoji ...

  7. HTML5 Canvas 2D library All In One

    HTML5 Canvas 2D library All In One https://github.com/search?q=Javascript+Canvas+Library https://git ...

  8. Smashing Conf 2020

    Smashing Conf 2020 https://smashingconf.com/online-workshops/ events https://smashingconf.com/ny-202 ...

  9. css infinite loop animation

    css infinite loop animation @keyframes loop { 0% { transform: translateX(0%); } constructed styleshe ...

  10. H5 APP 页面移动端适配方案

    H5 APP 页面移动端适配方案 https://segmentfault.com/a/1190000011586301 https://juejin.im/post/5cbdee71f265da03 ...