博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
聊聊小程序和服务器通信
阅读量:6967 次
发布时间:2019-06-27

本文共 2535 字,大约阅读时间需要 8 分钟。

刚开始接触小程序时,都会通过微信开发者工具建立一个快速启动模版,点击获取头像昵称,会获取自己的相关信息,如下图。

这里的信息是如何获取的?打开快速启动模版的源码可以看到wx.getUserInfo这个方法:

wx.getUserInfo({    success: res => {        app.globalData.userInfo = res.userInfo        this.setData({            userInfo: res.userInfo,            hasUserInfo: true        })    }})复制代码

response内容:

综上,我们通过wx.getUserInfo方法,访问微信服务器拿到数据信息。

***********************************

ps:

附:

在使用wx.getUserInfo

wx.getUserInfo() 调用这个方法获取用户信息时,之前会在小程序上自动弹出授权窗口,但是现在改了,这个方法依然可以使用,但是不会自动弹出授权窗口了。

就是说, 以前没有授权的情况下,调用方法,自动弹出授权窗口,授权后拿到用户信息,而现在,调用时会先给你提示,点击继续使用直接报错!!

如何解决呢?

在页面上加上授权按钮 <button open-type="getUserInfo">授权</button>,点击授权弹出授权弹窗,确认授权后在调用wx.getUserInfo(),返回正常。

***********************************

接正文:

类似 wx.getUserInfowx.getSetting 都是封装好的方法直接调用微信服务器,而小程序环境内一般的业务请求要如何发送呢?

通过 wx.request

wx.request({    url: 'test.php', //仅为示例,并非真实的接口地址    data: {        x: '',        y: ''    },    header: {        'content-type': 'application/json' // 默认值    },    success: function(res) {        console.log(res.data)    }})复制代码

那么现在问题来了!!!

只有 wx.request 能发送请求有啥用啊,任何一个业务流程都需要有 会话 来保证流程完整的一步一步的走下去,小程序中如何保持会话 ??? --(用cookie?呵呵,小程序不支持);

***********************************

ps:

当然, 现在有一些小程序插件是可以让请求带上cookie的, 感兴趣的同学可以研究下:

***********************************

接正文:

在网页开发中,一个正常的业务流程:

  • 登陆产生sessionid放在cookie中。
  • 后续请求都会带上sessionid保持会话。

而小程序是不支持cookie的,下面就来看下在不支持cookie的情况下,要如何保持会话:

首先第一步肯定是要先登录啦!!

此文对上图有一个不错的解释:

下面通过具体代码来看下,何如实现登陆,及后续请求带上登陆信息保持会话。

***********************************

ps:

下面的服务端代码都是基于腾讯云实验室提供的,可以作为参考。

里面有两种选择:

使用第二种方式同学,这里有一篇我之前搭建环境踩坑总结可以参考:

***********************************

接正文:

下载:

里面提供了:登陆,请求,会话。。。等等方法

├── wafer-client-sdk|   ├── lib|   |   ├── constants.js|   |   ├── login.js|   |   ├── request.js|   |   ├── session.js|   |   ├── tunnel.js|   |   ├── utils.js|   |   └── wxTunnel.js└── ...       复制代码

login.js 中:

登陆以后,在发起业务请求时:

上述为登陆客户端的实现,看下服务端的实现:

通过上述,对小程序与服务器通信有了一个大概的认识,在开发的过程中有一个新问题!!

  • 上述代码中, 每次发送请求都需要通过登录鉴权的中间件。这个跟业务逻辑好像根本无关。

  • 如果存在类似客服通信的信道需求,也需要写在业务服务器上。

上述两点会不会让业务服务器变的非常混乱。(会!!)

所以基于这两点,腾讯云推出了 wafer 解决方案。

把会话服务,信道服务单独抽出作为一层,使业务逻辑清晰很多。

上述的会话服务器,信道服务器如果个人自己搭建的话,成本很高。

  1. 首先需要有三台服务器: 业务服务器,会话服务器,信道服务器。

  2. 每台服务器都需要单独的运维部署,耗时耗力。

自己尝试搭建过,感觉太复杂了,最终还是放下了。。。。。。有兴趣的同学可以试试,下面是官方参考文档:

因为wafer刚出来的时候是针对企业用户的,所以搭建成本是相对可以接受的,后来wafer2的诞生,对个人用户放开,考虑到个人的开发成本,贴心的推出了牛X的:

通过开发者工具的腾讯云模块实现自动部署:

下面为一站式部署的一个官方DEMO(教程详细这里就不再多赘述了):

总结:

通过此篇大致的了解到小程序云与服务器独有的通信机制,结合文中的一些官方DEMO, 可以很好的掌握其中的原理。

==========================================================================================

后话:

为了让小程序开发者更加方便快捷的进行开发,又推出了 小程序云,宗旨是:让云能力将会成为小程序的基础能力。

  • 下面是相关文档介绍:

转载地址:http://vnbsl.baihongyu.com/

你可能感兴趣的文章
chapter 5:一个简单的规律问题。
查看>>
备份还原数据
查看>>
第一冲刺阶段组内评分
查看>>
线性代数——向量
查看>>
hibernate入门(1)_md
查看>>
Javascript疑问九:callback到底是什么,好抽象
查看>>
2017-2018-1 20155225 实验四 外设驱动程序设计
查看>>
SQL sever 和ACESS的互操作
查看>>
Bugku-CTF之速度要快
查看>>
洛谷 题解 UVA1626 【括号序列 Brackets sequence】
查看>>
C#委托的介绍(delegate、Action、Func、predicate)
查看>>
让数据随分批显示的方法
查看>>
(译)如何使用cocos2d和box2d来制作一个Breakout游戏:第二部分(完)
查看>>
Java学期总结
查看>>
sqlite3内存不断增加的原因
查看>>
vim基础学习1---简单命令
查看>>
Orchard模块开发全接触4:深度改造前台
查看>>
“Incompatible clusterIDs”错误原因分析
查看>>
以stm32f407为例,学习cortex-m4通用寄存器的用法
查看>>
WPF BitmapSourceToArray and ArrayToBitmapSource
查看>>