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


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 相关文章推荐
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
Apr 25 Javascript
JavaScript对象反射用法实例
Apr 17 Javascript
使用Raygun对Node.js应用进行错误处理的方法
Jun 23 Javascript
AngularJS向后端ASP.NET API控制器上传文件
Feb 03 Javascript
jQuery联动日历的实例解析
Dec 02 Javascript
javascript基本数据类型和转换
Mar 17 Javascript
JavaScript转换数据库DateTime字段类型方法
Jun 27 Javascript
webpack4打包vue前端多页面项目
Sep 17 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
May 24 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
Jul 26 Javascript
vue实现抽屉弹窗效果
Nov 15 Javascript
javascript实现倒计时提示框
Mar 02 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
phpBB BBcode处理的漏洞
2006/10/09 PHP
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php中adodbzip类实例
2014/12/08 PHP
php设计模式之委托模式
2016/02/13 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
JS trim去空格的最佳实践
2011/10/30 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
js仿QQ邮箱收件人选择与搜索功能
2017/02/10 Javascript
Vue2递归组件实现树形菜单
2017/04/10 Javascript
详解AngularJS controller调用factory
2017/05/19 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
详解JS函数防抖
2020/06/05 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
浅析PEP572: 海象运算符
2019/10/15 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
德国户外商店:eXXpozed
2020/07/25 全球购物
医学生实习自我鉴定
2013/09/27 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
追悼会答谢词
2015/01/05 职场文书
区域经理岗位职责
2015/02/02 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
网吧温馨提示
2015/07/17 职场文书
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python