阅读 89

聊聊小程序和服务器通信

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

这里的信息是如何获取的?打开快速启动模版的源码可以看到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的, 感兴趣的同学可以研究下:

weapp-cookie

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

接正文:

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

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

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

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

小程序登录官方文档

此文对上图有一个不错的解释:手把手教会你小程序登录鉴权

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

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

ps:

下面的服务端代码都是基于腾讯云实验室提供的基于 CentOS 搭建微信小程序服务,可以作为参考。

里面有两种选择:

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

搭建微信小程序服务踩坑总结

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

接正文:

下载: 客户端增强sdk

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

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

login.js 中:

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

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

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

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

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

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

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

wafer解决方案

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

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

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

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

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

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

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

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

Wafer2 Startup

node服务端sdk

总结:

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

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

后话:

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

  • 下面是相关文档介绍:

我是小程序,今后没有后台服务,一点都不慌

我是小程序开发者,有了小程序云,真的不慌了

关注下面的标签,发现更多相似文章
评论