如何在微信小程序中封装网络请求

发布时间:2021-05-11 16:59:36

来源:亿速云

阅读:95

作者:Leah

这期内容当中小编将会给大家带来有关如何在微信小程序中封装网络请求,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

网络请求

网络请求小程序提供了wx.request, 仔细看一下api,这不就是n年前的 $.ajax 吗,好古老啊。// 官方例子

wx.request({

url: 'test.php', //仅为示例,并非真实的接口地址

data: {

x: '' ,

y: ''

},

header: {

'content-type': 'application/json' // 默认值

},

success: function(res) {

console.log(res.data)

}

})

小程序支持ES6,那么就应该支持Promise 了,很开心~, 话不多说直接上代码吧

Promise封装const baseUrl = 'https://api.it120.cc';

const http = ({ url = '', param = {}, ...other } = {}) => {

wx.showLoading({

title: '请求中,请耐心等待..'

});

let timeStart = Date.now();

return new Promise((resolve, reject) => {

wx.request({

url: getUrl(url),

data: param,

header: {

'content-type': 'application/json' // 默认值 ,另一种是 "content-type": "application/x-www-form-urlencoded"

},

...other,

complete: (res) => {

wx.hideLoading();

console.log(`耗时${Date.now() - timeStart}`);

if (res.statusCode >= 200 && res.statusCode

resolve(res.data)

} else {

reject(res)

}

}

})

})

}

const getUrl = (url) => {

if (url.indexOf('://') == -1) {

url = baseUrl + url;

}

return url

}

// get方法

const _get = (url, param = {}) => {

return http({

url,

param

})

}

const _post = (url, param = {}) => {

return http({

url,

param,

method: 'post'

})

}

const _put = (url, param = {}) => {

return http({

url,

param,

method: 'put'

})

}

const _delete = (url, param = {}) => {

return http({

url,

param,

method: 'put'

})

}

module.exports = {

baseUrl,

_get,

_post,

_put,

_delete

}

使用const api = require('../../utils/api.js')

// 单个请求

api.get('list').then(res => {

console.log(res)

}).catch(e => {

console.log(e)

})

// 一个页面多个请求

Promise.all([

api.get('list'),

api.get(`detail/${id}`)

]).then(result => {

console.log(result)

}).catch(e => {

console.log(e)

})

登陆问题

做一个应用,肯定避免不了登录操作。用户的个人信息啊,相关的收藏列表等功能都需要用户登录之后才能操作。一般我们使用token做标识。

小程序并没有登录界面,使用的是wx.login。 wx.login会获取到一个 code,拿着该 code去请求我们的后台会最后返回一个token到小程序这边,保存这个值为 token 每次请求的时候带上这个值。

一般还需要把用户的信息带上比如用户微信昵称,微信头像等,这时候就需要使用 wx.getUserInfo ,这里涉及到一个用户授权的问题

带上用户信息就够了嘛? too young too simple!我们的项目不可能只有小程序,相应的微信公众平台可能还有相应的App,我们需要把账号系统打通,让用户在我们的项目中的账户是同一个。这就需要用到微信开放平台提供的 UnionID 。

登陆//app.js

App({

onLaunch: function () {

console.log('App onLaunch');

var that = this;

// 获取商城名称

wx.request({

url: 'https://api.it120.cc/'+ that.globalData.subDomain +'/config/get-value',

data: {

key: 'mallName'

},

success: function(res) {

wx.setStorageSync('mallName', res.data.data.value);

}

})

this.login();

this.getUserInfo();

},

login : function () {

var that = this;

var token = that.globalData.token;

// 如果有token

if (token) {

// 检查token是否有效

wx.request({

url: 'https://api.it120.cc/' + that.globalData.subDomain + '/user/check-token',

data: {

token: token

},

success: function (res) {

// 如果token失效了

if (res.data.code != 0) {

that.globalData.token = null;

that.login(); // 重新登陆

}

}

})

return;

}

// 【1】调用微信自带登陆

wx.login({

success: function (res) {

// 【2】 拿到code去访问我们的后台换取其他信息

wx.request({

url: 'https://api.it120.cc/'+ that.globalData.subDomain +'/user/wxapp/login',

data: {

code: res.code

},

success: function(res) {

// 如果说这个code失效的

if (res.data.code == 10000) {

// 去注册

that.registerUser();

return;

}

// 如果返回失败了

if (res.data.code != 0) {

// 登录错误

wx.hideLoading();

// 提示无法登陆

wx.showModal({

title: '提示',

content: '无法登录,请重试',

showCancel:false

})

return;

}

// 【3】 如果成功后设置token到本地

that.globalData.token = res.data.data.token;

// 保存用户信息

wx.setStorage({

key: 'token',

data: res.data.data.token

})

}

})

}

})

},

// 注册?? [这个看需求]

registerUser: function () {

var that = this;

wx.login({

success: function (res) {

var code = res.code; // 微信登录接口返回的 code 参数,下面注册接口需要用到

wx.getUserInfo({

success: function (res) {

var iv = res.iv;

var encryptedData = res.encryptedData;

// 下面开始调用注册接口

wx.request({

url: 'https://api.it120.cc/' + that.globalData.subDomain +'/user/wxapp/register/complex',

data: {code:code,encryptedData:encryptedData,iv:iv}, // 设置请求的 参数

success: (res) =>{

wx.hideLoading();

that.login();

}

})

}

})

}

})

},

// 获取用户信息

getUserInfo:function() {

wx.getUserInfo({

success:(data) =>{

this.globalData.userInfo = data.userInfo;

wx.setStorage({

key: 'userInfo',

data: data.userInfo

})

return this.globalData.userInfo;

}

})

},

globalData:{

userInfo:null,

subDomain:"34vu54u7vuiuvc546d",

token: null

}

})

授权问题

getUserInfo: function () {

// 先调用wx.getSetting 获取用户权限设置

wx.getSetting({

success(res) {

console.log('1');

if (!res.authSetting['scope.userInfo']) {

wx.authorize({

scope: 'scope.userInfo',

success() {

// 用户已经同意小程序使用录音功能,后续调用 wx.getUserInfo接口不会弹窗询问

wx.getUserInfo({

success: (data) => {

this.globalData.userInfo = data.userInfo;

wx.setStorage({

key: 'userInfo',

data: data.userInfo

})

return this.globalData.userInfo;

}

})

}

})

} else {

console.log(2);

}

}

})

},

上述就是小编为大家分享的如何在微信小程序中封装网络请求了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

小程序中封装ajax请求,如何在微信小程序中封装网络请求相关推荐

  1. 微信小程序请求头header_微信小程序开发:http请求

    在微信小程序进行网络通信,只能和指定的域名进行通信,微信小程序包括四种类型的网络请求. 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downlo ...

  2. 微信小程序学习(三):在微信开发者工具中,使用WeUI前端美化框架,微信小程序

    微信小程序学习(三):在微信开发者工具中,使用WeUI 这里就是将WeUI导入到微信开发者工具中,我并没有使用多少样式,这里只是展示了一下怎么引用 网上有很多的方法,我绝大多数都没看懂,这里就是最简单 ...

  3. 《微信小程序开发实战》学习笔记chapter1微信小程序人门

    Chapter01 微信小程序入门 1. 微信小程序介绍 1.1 什么是微信小程序 微信小程序是腾讯于2017年1月19日推出的一种不需要安装即可在微信平台上使用的应用.微信小程序和微信的原生功能应用 ...

  4. 微信小程序周报(第十期)-微信小程序联盟

    每周一笑 程序猿:我的第一个问题是,对于我第二个和第三个问题,你可不可以只用'能'和'不能'来回答? 老板:"OK!" 我的第二个问题是,如果我的第三个问题是我能不能涨工资?那么你 ...

  5. 微信小程序上传图片到服务器总是失败_微信小程序怎么上传图片到服务器?

    微信小程序怎么上传图片到服务器?相信很多人都会把小程序图片保存到本地吧,但是把图片上传到服务器就不一定了,下面一起随小编看看微信小程序怎么上传图片到服务器吧. 微信小程序怎么上传图片到服务器? 首先, ...

  6. php微信小程序多图上传,tp5实现微信小程序多图片上传到服务器功能

    最近在做一个教育类的小商城的微信小程序,用到了上传多个图片文件到服务器端,这里做一个讲解,希望对大家有所帮助. 1,小程序端: 在wxml文件中: 删除 点击上传作业 在js文件中: Page({ / ...

  7. php仿淘票票,前端微信小程序电影类仿淘票票微信小程序

    需求描述及交互分析 设计思路和相关知识点 电影界面顶部页签切换效果设计 正在热映界面布局设计 即将上映界面布局设计 电影详情页设计 我的界面列表导航设计 登录设计 相关知识点 (1)swiper滑块视 ...

  8. 微信小程序之仿淘宝分类入口 —— 微信小程序实战商城系列(2)

    分类入口,已经成为了商城项目必须的布局之一,这里以仿照淘宝的分类入口来做案例 下图红框部分,就是本文重点讲解部分,另外本文并没有写点击某个入口跳转页面. 如需学习页面跳转的同学,可以参考此文 微信小程 ...

  9. 微信小程序标题栏和导航栏的设置 —— 微信小程序教程系列(7)

    设置标题栏 标题栏window 在app.json文件里面,通过window对象里面的属性进行设置 示例: app.json: 运行: 设置导航栏 导航栏TabBar 如果我们的小程序是一个多 tab ...

最新文章

  1. Simple NHibernate Architecture[from]
  2. linux mint 17.3 内核,LinuxMint 17.3 Cinnamon抢鲜评测
  3. hadoop namenode启动不了_Hadoop框架:HDFS高可用环境配置
  4. mysql索引_mysql系列:深入理解mysql 索引特性(屡试不爽的mysql索引总结)
  5. 模糊图像处理 去除模糊_图像模糊如何工作
  6. linux脚本编写规则,shell脚本编写守则
  7. php 计算 目录大小,php计算整个目录大小的方法
  8. TOMCAT问题总结
  9. Java实训项目:GUI学生信息管理系统(2017)
  10. 【洛谷 P1070】道路游戏 (DP)
  11. 远离神经网络这个黑盒,人工智能不止这一条路可走
  12. 互联网如何“武装”农民?
  13. java用不起_Java,泛型不起作用
  14. c语言url下载文件,C/C++轻松实现文件下载
  15. 一个老程序员的计算机视觉蹒跚学习之路
  16. survival cutoff值
  17. 台式计算机如何定时关机,台式电脑设置定时关机
  18. 计算机网络连接无线局域网,电脑如何连接无线局域网
  19. 焱融科技加入多家行业协会与产业联盟,加速产业互联生态跃迁
  20. python 期货现货差价监测_基差,即期货与现货之间价格之差

热门文章

  1. 网络互联技术与实践教程(汪双硕、姚羽)——第一章 网络互联设备与管理
  2. android 短信数据库 双卡,关于android双卡手机sim卡信息采集适配的心得
  3. 平面创意设计师简历模板-Word简历可编辑下载
  4. Nvme-MI 协议理解-overview
  5. 算法与数据结构-数论之蒙哥马利模乘
  6. xp usb exfat补丁_今日热闻 | 小米十周年、荣耀30 Pro跑分曝光、iPhone 12 Pro外形曝光、KB4541335补丁导致蓝屏...
  7. 计算机组装实训台,计算机组装
  8. const verify = ref(null)为什么是null
  9. Qt 鼠标事件 与 键盘事件
  10. BestCoder Round #36