小程序的填坑小技巧之网络请求改造
北京阳光环球广告有限公司 http://www.sunad.net.cn 2018-05-08 浏览量:1000
Tags:
小程序在内测的时候就已经开始玩了,不过最开始的时候觉得,这sx东西东西怎么这么坑的样子,网络请求居然不是返回Promise而是用Callback的方式, 传值居然不能把值写在方法里只能用dataset,在这个全面组件化的大环境下居然不支持组件化...
其实最开始主要是书写时习惯的问题,秉承着我又不做小程序开发,就先忍着你的态度放任不管了。然而天有不测风云,最近因为业务的需求不得不做小程序相关的开发,我就倔脾气果断就不能忍了。果断的把不爽的地方改成能按我喜欢的方式来走,其中还遇到了一些其他的坑,一个个慢慢填,并把这些记录下来整理成了文章。
网络请求
网络请求小程序提供了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)
}
})
现在还是只有一个请求就已经感觉写的很长了,如果一个页面需要多个请求呢,如果请求的顺序还有要求呢该怎么办,各种嵌套又臭又长,如果要求所以请求都完成之后再显示界面呢 瞬间懵逼。
这个时候我弱弱的看了一眼小程序的JS版本的支持,欧耶,比较良心的支持ES6。也就是说我们可以将其改成Promise是可能的。接下来看我如何改造。
/* utils/api.js 自定义网络请求 */
const baseURL = 'https://yourapi.com' // 自己后台API地址
const http = ({ url = '', params = {}, ...other} = {}) => {
wx.showLoading({
title: '加载中...'
})
let time = Date.now()
console.log(`开始:${time}`)
return new Promise((resolve, reject) => {
wx.request({
url: getUrl(url),
data: params,
header: getHeader(),
...other,
complete: (res) => {
wx.hideLoading()
console.log(`耗时:${Date.now() - time}`)
if (res.statusCode >= 200 && res.statusCode < 300) {
resolve(res.data)
} else {
reject(res)
}
}
})
})
}
const getUrl = url => {
if (url.indexOf('://') == -1) {
url = baseURL + url
}
return url
}
const getHeader = () => {
try {
var token = wx.getStorageSync('token')
if (token) {
return { 'token': token }
}
return {}
} catch (e) {
return {}
}
}
module.exports = {
baseURL,
get (url, params = {}) {
return http({
url,
params
})
},
post(url, params = {}) {
return http({
url,
params,
method: 'post'
})
},
put(url, params = {}) {
return http({
url,
params,
method: 'put'
})
},
// 这里不能使用 delete, delete为关键字段
myDelete(url, params = {}) {
return http({
url,
params,
method: '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)
})
如果习惯了 fetch 以及 axios 的朋友应该都会比较喜欢这种写法。 在做网络请求的时候还遇到一个问题,登录授权的问题。
登录问题
做一个应用,肯定避免不了登录操作。用户的个人信息啊,相关的收藏列表等功能都需要用户登录之后才能操作。一般我们使用token做标识。然后又会涉及到token不存在,用户第一次登录,token过期后,重新登录等问题。比较常规的操作是直接跳转到登录页面。
然后坑就出现了,小程序并没有登录界面,使用的是 wx.login 。 wx.login 会获取到一个 code,拿着该 code 去请求我们的后台会最后返回一个token到小程序这边,保存这个值为 token 每次请求的时候带上这个值。(详情可以查看小程序登录。)
然而仅仅这样就够了吗? 很显然并不是。一般还需要把用户的信息带上比如用户微信昵称,微信头像等,这时候就需要使用 wx.getUserInfo ,这里涉及到一个用户授权的问题,留一个坑接下来再解决。带上用户信息就够了嘛? too young too simple!我们的项目不可能只有小程序,相应的微信公众平台可能还有相应的App,我们需要把账号系统打通,让用户在我们的项目中的账户是同一个。这就需要用到微信开放平台提供的 UnionID 。
ps.基于小程序在微信中的易传播性, 为了鼓励用户去传播分享一般还会提供邀请奖励机制。但是微信这边又会对诱导分享进行和谐处理。视情况慎用。(本文会在例子上加上该功能)
本文地址:http://www.sunad.net.cn/content-104-791-1.html
上一篇:微信小程序“反编译”实战
下一篇:微信小程序复活了传统 PC 游戏
- SEO知识
- SEO热点问题
- SEO工具
- seo外链怎么优化?07-16
- 如何对网站进行seo07-15
- 有用的金融seo推广方案07-15
- seo文章关键词怎么布局才有效果07-12
- 那些与SEO相关的技术07-11
- 网站优化标题重要吗?该怎样写标题呢?07-11
- seo运营是什么意思?07-10
- 那些与SEO相关的技术07-05
- 标题在网站SEO优化中的作用是什么?07-05
- div+css为什么对网站优化有很大的帮助07-26
- SEO网站优化常犯的几种过度优化07-26
- 网站优化怎么快速找有用的分类目录07-23
- 如何找搜索引擎的高质量原创文章07-23
- 企业站如何做好seo优化工作07-10
- 北京优化公司/北京网站优化/百度权重优化到底起到多大作用07-04
- 怎样优化百度下拉框与相关搜索07-02
- 整站优化SEO/更新保护网站最好要合适的几个处理办法06-26
- seo整站优化/整站优化SEO/刚着手建时站内优化操作06-21
- SEO新手优化网站要注意的问题05-28
- 百度seo整站优化/百度SEO网站优化/网站快速排名的几种操作05-23
- SEO网站优化更新如何做软文营销07-26
- 怎么利用差别化来做网站SEO排名07-23
- 利于网站SEO迅速排名的六种实用性办法07-23
- 北京SE0网站优化/丰台SEO优化/快速排名点击小心网站被K07-04
- 关键词优化公司/百度SEO优化/操作新站SEO常见的几种不正确06-21
- SEO网站优化点击率对网站排名有多大帮助05-28
- 百度seo整站优化/百度SEO网站优化/div+css布局网站对搜索引擎的好处05-23
- 企业手机网站建设/SEO优化TDK怎么写才符合搜索引擎呢05-22
- 企业手机网站建设/企业手机站设计制作/企业手机网站建设如何提前做seo工作05-22
- SEO网站优化大神讲解网址怎样做网站优化05-21
- 建站知识
- 网站设计
- 网站开发
- 如何用最少的钱搭建一个自己的网站07-16
- 网站建设基本流程07-15
- 网站设计之首页图文混排技巧:07-12
- 网站建设小技巧提升网站质量07-11
- 影响网站建设费用的主要原因有哪几点07-10
- php秒杀系统架构设计实例07-26
- 网站建设浅谈php中使用websocket07-23
- 小白学习:网站建设登录功能讲解07-04
- 网站建设设计/网站设计/html锚点定位四种方法05-23
- 网站建设托管/网站维护托管/html select事件方法汇总05-22
- 网站建设:php 后期静态绑定07-26
- Python使用Srapy框架爬虫模拟登陆并抓取知乎内容07-23
- 网站设计功能怎样做一个简单实用的上传功能07-04
- 百度seo整站优化/百度SEO网站优化/怎样找高品质的文章进行伪原创05-23
- 网站建设托管/网站维护托管/CSS 尺寸(Dimension)05-22
- 北京企业网站建设费用报价/CSS分组和嵌套选择器05-21
- 北京手机网站制作:CSS分组和嵌套选择器05-18
- 企业网站建设/企业站定制建站/CSS padding(填充)05-17
- 北京手机网站制作/企业站定制设计/CSS margin(外边距)05-16
- 网站建设报价/网站建设费用/网站制作报价/CSS padding(填充)05-15
- 网站设计:PHPExcel导入excel文件07-26
- 最受欢迎的Python开源框架07-23
- 北京网页设计/验证邮件和URL的方法07-04
- 网站建设托管/网站维护托管/PHP 表单验证05-22
- 北京企业网站建设费用报价/PHP表单处理05-21
- 网站定制:PHP 表单处理05-18
- 企业网站建设/企业站定制建站/PHP 全局变量 - 超全局变量05-17
- 北京手机网站制作/企业站定制设计/PHP 数组排序05-16
- 网站定制设计/网站定制/网站设计/什么是数组?05-14
- 网站定制设计/网站设计定制/PHP 用户定义函数05-14
- 行业资讯
- 应用解决方案
- 你羡慕那些利用小程序赚钱的人吗?其实你也可以。07-26
- 移动端网站开发如何做代码适配?05-22
- 手机企业站定制建站设计/APP启动页面也是APP引导页面吗05-21
- APP小程序中UI界面设计需要注意的问题05-18
- 手机APP小程序开发/手机app制作公司/APP开发的几点启蒙05-17
- APP小程序开发中经常碰到的误区05-16
- APP怎样设计用户体验05-14
- APP小程序怎么不让客户卸载05-14
- 分析用户不同生命周期阶段的最基本的指标05-11
- 利于手机app开发人员了解应用程序的性能05-11
- 抖音海外版遭封禁,小程序服务暂停,近期抖音可谓是多灾多难07-26
- 如何在博客 论坛做外部链接?05-22
- 手机企业站定制建站设计/物业APP开发需要功能有哪些05-21
- APP小程序开发中手指触发尺寸怎么设置05-18
- APP小程序怎样写运营方案05-14
- APP小程序怎样推广05-14
- APP程序怎样更好的运营05-11
- APP开发中的搜索功能的设计05-11
- 小程序使用第三方模块Underscore.js,Immutable.js,UUID05-09
- 如何处理用户的误操作引起的多次请求05-09