全网小程序接口请求封装实例代码


Posted in Javascript onNovember 06, 2020

前言

这篇文章主要针对一些初学者,有写的不好的地方,还请大家多多谅解!

在utils文件夹里面新建两个js文件,一个是api.js、一个就是requtil.js

api.js

这个文件主要api接口,废话不多说直接上代码了

const request = require('requtil.js')
/*Apis 把全部api都存在这里*/
const Apis = { 
 /* 用户相关 */
 'login': '/devicecenter/auth/weChtLoin',
 'bindUser': '/devicecenter/user/userBindinOpenId',
 'genQrCode': '/devicecenter/user/getUserRcode',
 
 /* 设备相关 */
 'getDeviceList': '/minipro/group/getDl', // 获取设备列表
 'getDeviceAdd': '/minipro/group/addDl', // 添加设备
 'getDeviceDtl': '/minipro/group/delDl', // 删除设备
}
/* 定义请求方法 */
const user = {
 login: function(data) {
 request.get(Apis.login, data)
 },
 getSecret: function(data) {
 request.get(Apis.getSecret, data)
 },
}
module.exports = {
 ...user
}

requtil.js

把微信的wx.request请求进行分开封装

const globalsetting = require('globalsetting.js')
const baseURL = globalsetting.server
const util = require('util.js')

const ignoreUrls = [
 '/auth/weChatLogin',
 '/user/userBindingOpenId',
 '/user/getSecret',
 '/user/getOpenId'
]
var token = ''

function post(url, args) {
 args = _prev(url, 'POST', args)
 wx.request(args)
}
function get(url, args) {
 args = _prev(url, 'GET', args)
 wx.request(args)
}
function put(url, args) {
 args = _prev(url, 'PUT', args)
 wx.request(args)
}
function _delete(url, args) {
 args = _prev(url, 'DELETE', args)
 wx.request(args)
}
function _prev(url, method, args) {
 // console.log('123',args)
 args = args || {}
 args.url = url
 if(args.urlparam) 
 args.url += '/' + args.urlparam
 var params = parseParams(args)
 params.method = method
 params.success = success(params.success)
 params.fail = fail(params.fail)
 setToken(params)
 return params
}
// 处理接口是否需要添加header.token方法
function setToken(params) {
 if (!ignoreUrls.some(url => params.url.match(new RegExp(url)))) {
 if (!params.header)
  params.header = { token: getToken() }
 else 
  params.header.token = getToken()
 } else {
 // console.log('ignore: ', params.url)
 }
}
// 处理接口参数方法
function parseParams(args) {
 var params = Object.assign(args)
 if (!(params.url.startsWith('https://') || params.url.startsWith('http://')))
 params.url = baseURL + params.url
 if(params.param) {
 if (params.url.indexOf('?') > -1 && params.url.indexOf('?') != params.url.length - 1) {
  params.url += '&' 
 } else if(params.url.indexOf('?') == params.url.length -1) {
  // 无任何操作
 } else {
  params.url += '?'
 }
 var buf = ''
 for(var name in params.param) {
  let val = params.param[name];
  buf += name + '=' + encodeURI(typeof val == 'object' ? JSON.stringify(val) : val) + '&'
 }
 params.url += buf
 }
 return params
}
// 接口返回成功方法
function success(callback) {
 return function(rs) {
 var status = rs.statusCode
 if (status == 405) {
  util.errorMsg('请求失败405:\n服务器返回失败')
 } else if(status == 404) {
  util.errorMsg('请求失败404:\n找不到接口')
 }
 if(callback) callback(rs.data)
 }
}

function fail(callback) {
 return function(rs) {
 console.log(rs)
 if(callback) callback(rs)
 }
}
// 获取接口请求回来的token
function _setToken(tk) {
 token = tk
 wx.setStorageSync('token', token)
}

页面怎么调用

在全局的app.js里面

import api from './utils/apis.js';
App({
	api: api,
})

index页面

通过getApp()获取api接口,自定义一个函数里面用到了promise方法获取数据,然后在getDevList调用getChatRecord方法,就可以数据赋值

const APP = getApp()
getDevList(e){
 this.getChatRecord().then(res => {
 wx.hideLoading({
  success: (res) => {},
 });
 if(res.id == '-1') {
  utils.errorMsg(res.message);
 }else {
  console.log(res)
 }
 })
}
// 设备列表请求接口
getChatRecord (params = {}) {
 return new Promise((resolve, reject) => {
 APP.api.getDeviceList({
  success: res => {
  resolve(res)
  }
 })
 })
},

后期我会做一个demo出来,放到github上面,这样你们看起来更直观一些

总结

到此这篇关于全网小程序接口请求封装实例的文章就介绍到这了,更多相关全网小程序接口请求封装内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
js innerHTML 的一些问题的解决方法
Jun 22 Javascript
网络图片延迟加载实现代码 超越jquery控件
Mar 27 Javascript
javascript中"/"运算符常见错误
Oct 13 Javascript
Package.js  现代化的JavaScript项目make工具
May 23 Javascript
浅析node连接数据库(express+mysql)
Nov 30 Javascript
JavaScript仿商城实现图片广告轮播实例代码
Feb 06 Javascript
javascript作用域、作用域链(菜鸟必看)
Jun 16 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
Jun 18 Javascript
JavaScript中setTimeout的那些事儿
Nov 14 Javascript
webpack学习笔记之优化缓存、合并、懒加载
Aug 24 Javascript
vue构建动态表单的方法示例
Sep 22 Javascript
Vuex的API文档说明详解
Feb 05 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
Nov 06 #Javascript
微信小程序自定义tabBar的踩坑实践记录
Nov 06 #Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
Nov 06 #Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
Nov 06 #Javascript
vue中的计算属性和侦听属性
Nov 06 #Javascript
nuxt.js添加环境变量,区分项目打包环境操作
Nov 06 #Javascript
使用Vue实现一个树组件的示例
Nov 06 #Javascript
You might like
dedecms模版制作使用方法
2007/04/03 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
php实现加减法验证码代码
2014/02/14 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
php实现数据库的增删改查
2017/02/26 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
python 合并文件的具体实例
2013/08/08 Python
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
Python实现图片尺寸缩放脚本
2018/03/10 Python
python for和else语句趣谈
2019/07/02 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
Python自动化爬取天眼查数据的实现
2021/06/15 Python