之前写请求都是用别人封装好的,直接 import request 完事,自己第一次写还是一头雾水,学习了一波搞清楚了些,可以写简单的封装了。

首先要搞清楚为什么封装请求,同其他的封装一样,我们把不同请求里相同的代码抽离出来进行复用,提高编码效率。比如根域名的配置,响应失败的处理,token 的携带……这些是大多数请求都需要的,把它们封装起来就可以避免写重复的代码。那么怎样封装呢?根域名配置可以单独放在一个配置文件里,想用的时候引入一下就可以了;处理响应失败和携带 token 则要分别用到响应拦截器和请求拦截器。下面来一一说明。

在开发时经常使用的 axios 在小程序里用不了,本文使用了类似的 flyio。Fly.js 是一个支持所有JavaScript运行环境的基于Promise的、支持请求转发、强大的http请求库。文档地址:https://wendux.github.io/dist/#/doc/flyio/readme

首先创建一个 config.js 文件存储 baseurl:

let baseurl = ""

if (process.env.NODE_ENV === 'development') {
// 本地
baseurl = 'https://xxx'
// 预发
// baseurl = 'https://xxx'
// 正式
// baseurl = 'https://xxx' } else {
// 预发
// baseurl = 'https://xxx'
// 正式
baseurl = 'https://xxx'
} export default baseurl

再创建 api.js 文件进行请求封装:

var Fly = require("./fly") //
var fly = new Fly; //创建fly实例
import baseurl from './config.js' // 配置请求根域名
fly.config.baseURL = baseurl; // 配置响应拦截器
fly.interceptors.response.use(
(response) => {
// 权限问题报错
if (response.data.retcode == 10003 || response.data.retcode == 10004 || response.data.retcode == 10011) {
uni.showModal({
title: '温馨提示',
content: '无权限访问或登录信息已过期,请返回登录页重新登录后重试!'
})
return Promise.reject(response.data)
} else if (response.data.retcode != 0) {
uni.showModal({
title: '温馨提示',
content: response.data.text,
showCancel: false
})
return Promise.reject(response.data)
} else {
//只将请求结果的data字段返回
return Promise.resolve(response.data)
}
},
(err) => {
console.log(err, 'err')
//发生网络错误后会走到这里
uni.showModal({
title: '温馨提示',
content: "网络请求异常:" + err.message
})
return Promise.reject("网络请求异常:" + err.message)
}
)
// 配置请求拦截器
fly.interceptors.request.use((request) => {
// 请求头携带token,不要问我token怎么来的
request.headers["token"] = uni.getStorageSync('token');
return request;
}) export default fly

在 main.js 文件里引入 api 并设置全局变量让它能够在全局调用:

import Vue from 'vue'
import App from './App' import API from '@/common/api' Vue.config.productionTip = false Vue.prototype.$api = API App.mpType = 'app' const app = new Vue({
...App
})
app.$mount()

在页面里调用:

this.$api.get('xxx/xxx')
.then(res => {
// 处理响应结果
console.log(res)
}) // 因为在请求封装里已经处理过响应失败的情况了,没有特殊情况可以不用catch

uniapp 基于 flyio 的 http 请求封装的更多相关文章

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

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

  2. flyio 的请求封装

    1.安装flyio.js npm install flyio --save-dev 2.在util创建一个fly.js用于封装 import Vue from 'vue' var Fly=requir ...

  3. 基于 fetch 的请求封装

    原生 fetch 请求失败后(如无网络)状态会变成 reject 走 .catch .绝大多数情况下业务场景只需要给个 toast 等简单处理.每个请求都 .catch 会显得格外繁琐,并且如果不 . ...

  4. .NetCore简单封装基于IHttpClientFactory的HttpClient请求

    IHttpClientFactory是什么?为什么出现了IHttpClientFactory 一.IHttpClientFactory是什么? IHttpClientFactory是.netcore2 ...

  5. WebApi系列~基于单请求封装多请求的设计

    回到目录 怎么说,单请求封装多请求,这句话确实有点绕了,但还是要看清楚,想明白这到底是怎么一回事,单请求即一次请求(get,post,put,delete),封闭多请求,即在客户端发送的一个请求中可能 ...

  6. iOS开发--Swift 基于AFNetworking 3.0的网络请求封装

    Swift和OC基于AFNetworking的网络请求流程相同, 就是语法不同, 对于Swift语法不是很清楚的同学, 建议多看看API文档, 自己多多尝试. 写过OC的应该都明白每句话做什么的, 就 ...

  7. vue-cli配置axios,并基于axios进行后台请求函数封装

    文章https://www.cnblogs.com/XHappyness/p/7677153.html已经对axios配置进行了说明,后台请求时可直接this.$axios直接进行.这里的缺点是后端请 ...

  8. webapi基于单请求封装多请求的设计【转】

    怎么说,单请求封装多请求,这句话确实有点绕了,但还是要看清楚,想明白这到底是怎么一回事,单请求即一次请求(get,post,put,delete),封闭多请求,即在客户端发送的一个请求中可能包含多个子 ...

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

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

随机推荐

  1. mysql小白系列_06 备份与恢复

    1.使用mydumper工具全库备份. 1)源码编译安装 2)全库备份 2.误操作truncate table gyj_t1;利用mysqldump的备份和binlog日志对表gyj_t1做完全恢复. ...

  2. 201771010128王玉兰《面象对象程序设计(Java)》第七周学习总结

    第一部分:基础知识总结: 1继承 A:用已有类来构建新类的一种机制,当定义了一个新类继承一个类时,这个新类就继承了这个类的方法和域以适应新的情况: B:特点:具有层次结构.子类继承父类的方法和域: C ...

  3. 性能测试之服务器监控和Prometheus推荐

    服务器的监控,也是采用Prometheus和Grafana.可以监控服务器系统负载.CPU使用率.网络流量.磁盘使用率.磁盘读写速度.IO耗时.网络信息. 效果图 安装使用 安装启动node_expo ...

  4. 【原创】CentOS 7搭建多实例MySQL8(想要几个搞几个)

    起因 最近项目上开始重构,可能会用到主从加读写分离的情况,就想先在本地搭一个出来试试效果,结果百度一搜出来一大堆,然而自己去踩坑的没几个,绝大多数都是去抄的别人的内容,关键是实际应用中还会出错,浏览器 ...

  5. SPL常用函数

    使用SPL_AUTOLOAD_REGISTER装载类 <?php /** * libs/Test.class.php */ class Test { function __construct() ...

  6. Kubernetes学习笔记(七):访问Pod元数据与Kubernetes API

    Downward API 我们已经了解到,使用ConfigMap和Secret向应用传递配置数据,这对于运行前预设的数据是可行的.但是对于那些不能预先知道的,就需要使用Downward API. Do ...

  7. Java基础语法--分支结构

    if-else 结构 if(条件表达式){ 执行代码块; } if(条件表达式){ 执行代码块; }else { 执行代码块; } if(条件表达式){ 执行代码块; }else if (条件表达式) ...

  8. 性能测试之Docker监控

    微服务.大中台盛行的当下,容器化已经被广泛使用.在性能测试过程中,对容器的监控模型构建也是必不可少的. 我们性能测试监控模型的构建一直是围绕着Prometheus和Grafana来展开的.她们可以快速 ...

  9. Unity 游戏框架搭建 2019 (五十二~五十四) 什么是库?&第四章总结&第五章简介

    在上一篇,我们对框架和架构进行了一点探讨.我们在这一篇再接着探讨. 什么是库呢? 来自同一位大神的解释: 库, 插到 既有 架构 中, 补充 特定 功能. 很形象,库就是搞这个的.我们的库最初存在的目 ...

  10. Alpha冲刺 —— 5.9

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 Alpha冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.总 ...