騰訊雲 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 使用門檻低,但如今還不夠穩定。我的項目玩玩仍是能夠的,商業項目要用的話,建議再觀察一段時間吧。

相關文章
相關標籤/搜索