前端程序員開發一個本身的小程序,比起學習小程序開發,更大的難點在於搭建小程序的後臺。php
本文從一個初學者的角度,簡單介紹一下騰訊雲推出的小程序解決方案 wafer2,讓沒有後臺開發經驗的程序員,也能搭建起本身的小程序後臺。前端
後臺的搭建涉及到購買服務器、購買數據庫,而後要在服務器上安裝運行環境等。說實話,我連要在服務器上裝什麼都不知道。因此但願能有一個東西,幫我把這些都作好,要是再提供一些登陸之類的經常使用接口就更好了。這就是 wafer 所作的。java
其實在小程序後臺配置域名的地方,就有跳轉到騰訊雲的連接:node
進入後按照指引購買,就能夠擁有一個配置好的後臺。mysql
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 使用門檻低,但如今還不夠穩定。我的項目玩玩仍是能夠的,商業項目要用的話,建議再觀察一段時間吧。