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


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 相关文章推荐
javascript设计模式之对象工厂函数与构造函数详解
Jul 30 Javascript
浅谈JavaScript对象的创建方式
Jun 13 Javascript
js 弹出虚拟键盘修改密码的简单实例
Oct 10 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
Apr 07 Javascript
基于vue实现swipe轮播组件实例代码
May 24 Javascript
微信小程序实现自动定位功能
Oct 31 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
Nov 22 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
Apr 30 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
Apr 21 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
Aug 06 Javascript
vue render函数动态加载img的src路径操作
Oct 26 Javascript
TypeScript中条件类型精读与实践记录
Oct 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
PHP数组相关函数汇总
2015/03/24 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
python抓取网页中链接的静态图片
2018/01/29 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
python实现简单遗传算法
2020/09/18 Python
Django celery异步任务实现代码示例
2020/11/26 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
婚礼证婚人证婚词
2014/01/13 职场文书
档案保密承诺书
2014/06/03 职场文书
2014最新实习证明模板
2014/10/02 职场文书
2015年档案管理工作总结
2015/04/08 职场文书
公司人事任命通知
2015/04/20 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
活动新闻稿范文
2015/07/17 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android
Python中的datetime包与time包包和模块详情
2022/02/28 Python
vue中div禁止点击事件的实现
2022/04/02 Vue.js