腾讯云 wafer2 上手,轻松部署小程序后端!

前端程序员开发一个本身的小程序,比起学习小程序开发,更大的难点在于搭建小程序的后台。php

本文从一个初学者的角度,简单介绍一下腾讯云推出的小程序解决方案 wafer2,让没有后台开发经验的程序员,也能搭建起本身的小程序后台。前端

简介

wafer

后台的搭建涉及到购买服务器、购买数据库,而后要在服务器上安装运行环境等。说实话,我连要在服务器上装什么都不知道。因此但愿能有一个东西,帮我把这些都作好,要是再提供一些登陆之类的经常使用接口就更好了。这就是 wafer 所作的。java

其实在小程序后台配置域名的地方,就有跳转到腾讯云的连接:node

进入后按照指引购买,就能够拥有一个配置好的后台。mysql

wafer2

wafer 相对于本身搭建后台已经方便不少了,但我用起来仍是感受有难度。我不熟悉 Linux,也搞不懂如何测试代码。直到发现腾讯云又推出了 wafer2。git

若是你用上了新版小程序开发工具,会在工具的右上角发现一个「腾讯云」的按钮:程序员

这个按钮就是用来链接 wafer2 的。github

咱们能够直接在小程序开发工具里编写后台代码,并上传代码,后台是区分开发环境和生产环境的。sql

下面咱们看看怎么使用 wafer2。数据库

搭建

开发环境

搭建 wafer2 很简单,你们按照官方文档来,应该没什么问题的,这里就不赘述了。

生产环境

官方文档说的都是开发环境,要是你想部署到生产环境,有些配置须要改一下。

域名

开发环境的域名是腾讯云分配的 xxx.qcloud.la,而生产环境须要使用本身在腾讯云里的域名。

经过腾讯云管理中心注册的域名,会自动部署 HTTPS 证书。可是要备案的话,须要登记服务器 ip,而 wafer2 的服务器 ip 是没有提供给咱们的。目前备案只能再买一个服务器......

绑定域名后,能够在开发工具「详情」-「腾讯云状态」确认生产环境域名:

切换到生产环境后,别忘了把客户端的接口域名也改一下。

数据库

在腾讯云管理中内心,修改生产环境 MySql 的登陆密码。而后登陆 phpMyAdmin,在首页能够看到 MySql 的服务器 ip 地址,记下来。

回到开发工具,找到 server/config.js,修改里面 MySql 配置的 ip 地址及登陆密码:

  mysql: {
    host: '修改成生产环境 ip',
    port: 3306,
    user: 'root',
    db: 'cAuth',
    pass: '修改成生产环境密码',
    char: 'utf8mb4'
  },复制代码

在开发工具上传正式代码,再到管理中心的生产环境,点击「代码部署」。这样就完成生产环境的配置及部署了。

比外须要注意,开发环境的 MySql 是 5.7 的,而生产环境是 5.6 的。注意不要在开发的时候使用 JSON 等 MySql 5.7 才有的功能。

登陆

先说一下小程序基本都会用到的登陆。

使用

wafer2 的客户端及服务端 sdk,已经集成了登陆逻辑,在客户端引用 sdk 后,只要调用它的 login 方法就能够实现登陆了:

qcloud.login({
  success: res => {
    console.log('登陆成功', res)
  },
  fail: err => {
    console.log('登陆失败', err)
  }
})复制代码

登陆成功会将用户数据保存在数据库 cAuth 的 cSessionInfo 表里,并将用户数据返回。

看起来很美好,可是这里面是存在一些问题的。

问题

用户登陆过以后会将用户信息缓存在本地,当有缓存的时候会将用户信息直接返回。可是 sdk 中,缓存的存取都是有问题的,有缓存的状况下,会返回 undifined。

这是个很低级的错误,问题已经给官方反馈了。截止到写这篇文章,取数据的地方改了,但存的地方还没改......

因此如今要正常使用,须要到 wafer2-client-sdk/lib/login.js,找到保存用户数据的地方:

Session.set(res.skey);复制代码

修改成:

Session.set(res);复制代码

另外,还想吐槽一下,sdk 里 wx.login 和 wx.getUserInfo 是搭配使用的。

也就是说,必需要获取到用户信息,才能实现登陆。而咱们知道,小程序在获取用户信息时会弹窗,而且用户是能够拒绝的。拒绝后一段时间内,调用 wx.getUserInfo 都不会再弹窗。能够说 wafer2 没有考虑用户拒绝受权的状况。而这刚好是微信不提倡的作法,甚至可能致使没法经过审核。

这个问题我也向官方反馈了。

第一个接口

学习要有目的性才能保持兴趣,配置完了咱们来写一个本身的接口。

wafer2 基于 Node.js 平台,使用了 Koa2 框架。

在 server/controllers 下新建文件 hello.js,输入以下代码:

module.exports = async ctx => {
  ctx.state.data = "Hello World !"
}复制代码

代码很简单,就是暴露一个返回结果是「Hello World !」的方法,「Hello World !」会被放在请求结果的 data 里。

而后咱们打开 server/routes/index.js

添加一句代码:

// 测试接口
router.get('/hello', controllers.hello)复制代码

代码就只有这么多。保存以后点击「腾讯云」-「上传测试代码」,若是是第一次上传要勾上「部署后自动安装依赖」。等待上传成功,就能够测试咱们的接口了。

调用 xxx.qcloud.la/weapp/hello,看是否返回如下结果:

{
  code: 0,
  data: "Hello World !"
}复制代码

恭喜!你本身开发的第一个接口已经调通了!

数据库操做

wafer2 使用了 knex 做为数据库的查询构造器,而且已经配置好了。对于有 sql 经验的程序员,能够很快的上手。

咱们能够在 phpMyAdmin 里,在 cAppinfo 这个数据库里建立须要的表。

假如已经有一个「Book」的表,下面代码,简单展现了在 wafer2 里,如何对数据库进行增查改删:

const { mysql } = require('../qcloud')
const uuid = require('node-uuid')

module.exports = async ctx => {
  var id = uuid.v1()
  // 增
  var book = {
    id: id,
    name: "冰与火之歌",
    price: 88
  }
  await mysql("Book").insert(book)
  // 查
  var res = await mysql("Book").where({ id }).first()
  // 改
  await mysql("Book").update({ price: 66 }).where({ id })
  // 删
  await mysql("Book").del().where({ id })

  ctx.state.data = "OK"
}复制代码

数据库操做默认都是异步执行的,若是要等待操做完成,须要在操做语句前加上 await。

更高级的 sql 用法,能够查看 knex.js 官网

总结

我已经将本身的小程序「碰词er」后台迁移到 wafer2 了。开发的时候各类坑,给腾讯云提了一些很明显的 bug。说不定「碰词er」是第一个使用 wafer2 的小程序。

wafer2 用起来方便。咱们不用懂太多后台配置的东西,先后端代码都在小程序开发工具编写,直接在开发工具上传后端代码,区分了开发、生产环境,并且目前仍是免费的,虽然说不知道会不会一直有免费版。

但目前缺点一样明显,好比备案不方便,登陆接口不合理,sdk 有 bug 等。我还碰到服务器宕机,须要重启的状况。但愿腾讯云接下来能解决这些问题。

总的来讲,wafer2 使用门槛低,但如今还不够稳定。我的项目玩玩仍是能够的,商业项目要用的话,建议再观察一段时间吧。

相关文章
相关标签/搜索