热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

uniapp的请求封装

https:www.cnblogs.comgqx-htmlp10967570.html1.环境配置(可参考uni-官网的环境配置)common文件夹下新建config.jsle

https://www.cnblogs.com/gqx-html/p/10967570.html

1.环境配置 (可参考uni-官网的环境配置)

common文件夹下新建config.js

let url_config = ""if(process.env.NODE_ENV === 'development'){// 开发环境url_config = 'https://*****.com/'
}else{// 生产环境url_config = 'https://*****.com/'
}export default url_config

 

2.uni.request封装

common文件夹下新建request.js

import urlConfig from './config.js'const request = {}
const headers = {}
const PORT1 = '/baseinfo'request.globalRequest = (url, method, data, power) => {
/* 权限判断 因为有的接口请求头可能需要添加的参数不一样,所以这里做了区分1 == 不通过access_token校验的接口2 == 文件下载接口列表3 == 验证码登录 */switch (power){case 1:headers['Authorization'] = 'Basic a3N1ZGk6a3N1ZGk='break;case 2:headers['Authorization'] = 'Basic a3N1ZGlfcGM6a3N1ZGlfcGM='break;case 3:responseType = 'blob'break;default:headers['Authorization'] = `Bearer ${this.$store.getters.userInfo}`headers['TENANT-ID'] = this.$store.getters.userInfo.tenant_idbreak;}return uni.request({url: urlConfig + url,method,data: data,dataType: 'json',header: headers}).then(res => {if (res[1].data.status && res[1].data.code == 200) {return res[1]} else {throw res[1].data}}).catch(parmas => {

      switch (parmas.code) {

        case 401:

          uni.clearStorageSync()

          break

        default:

          uni.showToast({

            title: parmas.message,

            icon: 'none'

          })

          return Promise.reject()

          break

      }

  })

} export default request

 

3.接口配置

项目根目录下新建api文件,api下新建index.js

 

import request from '@/common/request.js'
import { formatGetUri } from '@/common/util.js'const api = {}
const PORT1 = 'baseinfo'
// POST请求方式
api.register = params => request.globalRequest(`${PORT1}/mobile/signUp`, 'POST//必须大写,为了兼容其他应用', params, 1)
// GET请求方式
api.register = params => request.globalRequest(`${PORT1}/mobile/signUp${formatGetUri(params)}`, 'GET //必须大写,为了兼容其他应用',{}, 1)

export default api

 

 

4. 新建common/util.js

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

/**

 * 拼接对象为请求字符串

 * 对于需要编码的文本(比如说中文)我们要进行编码

 * @param {Object} obj - 待拼接的对象

 * @returns {string} - 拼接成的请求字符串

 **/

export function formatGetUri(obj: Object) {

  const params: Array<string> &#61; []

  Object.keys(obj).forEach((key) &#61;> {

    let value &#61; obj[key]

    if (typeof value !&#61;&#61; &#39;undefined&#39; || value !&#61;&#61; null) {

      params.push([key, encodeURIComponent(value)].join(&#39;&#61;&#39;))

    }

  })

  return &#39;?&#39; &#43; params.join(&#39;&&#39;)

}

  

5.全局配置

在main.js中新增

import Vue from &#39;vue&#39;
import App from &#39;./App&#39;
import store from &#39;./store&#39; // 与vue项目中配置相同&#xff0c;可自行配置import request from &#39;./common/request.js&#39;
import api from &#39;./api/index.js&#39;
import url from &#39;./common/config.js&#39;Vue.config.productionTip &#61; false
Vue.prototype.$request &#61; request
Vue.prototype.$api &#61; api
Vue.prototype.$url &#61; urlApp.mpType &#61; &#39;app&#39;const app &#61; new Vue({...App,store
})app.$mount()

 

 

5.接口调用

this.$api.register({mobile: this.mobile}).then(res &#61;> {// 获得数据 console.log(res)
}).catch(res &#61;> {// 失败进行的操作
})

 


推荐阅读
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文介绍了如何使用vue-awesome-swiper组件,包括在main.js中引入和使用swiper和swiperSlide组件,以及设置options和ref属性。同时还介绍了如何在模板中使用swiper和swiperSlide组件,并展示了如何通过循环渲染swipes数组中的数据,并使用picUrl属性显示图片。最后还介绍了如何添加分页器。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • Python15行代码实现免费发送手机短信,推送消息「建议收藏」
    Python15行代码实现免费发 ... [详细]
  • 详解react组件通讯方式(多种)
    这篇文章主要介绍了详解react组件通讯方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着 ... [详细]
  • 手把手教会你使用责任链模式
    什么是责任链模式顾名思义,责任链就是将多个处理单元串成链路,是一种行为模式。例如我们的登录校验(用户判断-账号密码判断-验证码校验- ... [详细]
  • TunesKit AceMovi视频编辑软件的背景音乐添加方法
    TunesKit AceMovi是一款功能强大的视频编辑软件,本文介绍了使用TunesKit AceMovi给视频添加背景音乐的具体操作方法,包括导入文件、选择音乐素材、拖拽到时间线、分割音频等步骤。通过添加适当的背景音乐,可以提升视频的感染力。详细的操作步骤在文章中有详细介绍,适合需要给视频添加背景音乐的用户使用。 ... [详细]
  • 先看看ElementUI里关于el-table的template数据结构:<template><el-table:datatableData><e ... [详细]
author-avatar
壹诺彡_壹生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有