• 在项目 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. ASP.Net Core 5.0 MVC中AOP思想的体现(五种过滤器)并结合项目案例说明过滤器的用法

    执行顺序 使用方法,首先实现各自的接口,override里面的方法, 然后在startup 类的 ConfigureServices 方法,注册它们. 下面我将代码贴出来,照着模仿就可以了 IActi ...

  2. Nginx基础 - Nginx+Lua实现灰度发布与WAF

    1.Nginx加载Lua环境默认情况下Nginx不支持Lua模块, 需要安装LuaJIT解释器, 并且需要重新编译Nginx, 建议使用openrestry 1)环境准备 [root@localhos ...

  3. Atlas 分表功能

    目录 分表原因 分表方式 Atlas 分表 分表思路 配置 Atlas 创建原表 创建分表 数据测试 分表原因 1.数据过多,访问缓慢 2.创建索引时重新排序,创建缓慢,并且占用大量的磁盘空间 分表方 ...

  4. 网络安全-企业环境渗透2-wordpress任意文件读&&FFmpeg任意文件读

    参考 http://prontosil.club/posts/c08799e1/ 一. 实验名称 企业环境渗透2 二. 实验目的 [实验描述] 操作机的操作系统是kali 进入系统后默认是命令行界面 ...

  5. mybaits(十)mybatis常见面试

      面试题总结 1.MyBatis 解决了什么问题? 或:为什么要用 MyBatis? 或:MyBatis 的核心特性? 1)资源管理(底层对象封装和支持数据源) 2)结果集自动映射 3)SQL 与代 ...

  6. Linux cp command All In One

    Linux cp command All In One $ man cp $ cp -h # 强制 $ cp -f # 递归,复制文件夹 $ cp -r demos cp -fr # ./folder ...

  7. DOH & TRR & HTTPS & DNS

    DOH & TRR & HTTPS & DNS DNS over HTTPS Trusted Recursive Resolver DNS 解析过程图解 DNS 解析过程 递归 ...

  8. useState & useEffect

    useState & useEffect https://overreacted.io/zh-hans/a-complete-guide-to-useeffect/ https://react ...

  9. NGK八大板块:为何郊区市场近来火爆?-VALAITIS, PETER ANTHONY分析

    PAUL ADAMS ARCHITECT LTD董事长VALAITIS, PETER ANTHONY称受大环境影响很多纽约人都选择离开纽约市中心,搬往附近郊区,因此附近地区楼市开始不断升温. 根据房地 ...

  10. 实用Macbook软件系列

    Macbook Software 实用Macbook软件系列 我的Mac都装了哪些软件 鉴于很多小伙伴刚刚由win系统转换到mac,一开始会有很多不适应的地方,所以本期文章准备给大家介绍下mac上一些 ...