溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

wafer2如何實現(xiàn)輕松部署小程序后端

發(fā)布時間:2022-01-12 14:06:42 來源:億速云 閱讀:117 作者:柒染 欄目:云計算

這篇文章將為大家詳細講解有關(guān)wafer2如何實現(xiàn)輕松部署小程序后端,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

前端程序員開發(fā)一個自己的小程序,比起學(xué)習(xí)小程序開發(fā),更大的難點在于搭建小程序的后臺。

本文從一個初學(xué)者的角度,簡單介紹一下騰訊云推出的小程序解決方案 wafer2,讓沒有后臺開發(fā)經(jīng)驗的程序員,也能搭建起自己的小程序后臺。

簡介

wafer

后臺的搭建涉及到購買服務(wù)器、購買數(shù)據(jù)庫,然后要在服務(wù)器上安裝運行環(huán)境等。說實話,我連要在服務(wù)器上裝什么都不知道。所以希望能有一個東西,幫我把這些都做好,要是再提供一些登錄之類的常用接口就更好了。這就是 wafer 所做的。

其實在小程序后臺配置域名的地方,就有跳轉(zhuǎn)到騰訊云的鏈接:

進入后按照指引購買,就可以擁有一個配置好的后臺。

wafer2

wafer 相對于自己搭建后臺已經(jīng)方便很多了,但我用起來還是感覺有難度。我不熟悉 Linux,也搞不懂如何測試代碼。直到發(fā)現(xiàn)騰訊云又推出了 wafer2。

如果你用上了新版小程序開發(fā)工具,會在工具的右上角發(fā)現(xiàn)一個「騰訊云」的按鈕:

這個按鈕就是用來連接 wafer2 的。

我們可以直接在小程序開發(fā)工具里編寫后臺代碼,并上傳代碼,后臺是區(qū)分開發(fā)環(huán)境和生產(chǎn)環(huán)境的。

下面我們看看怎么使用 wafer2。

搭建

開發(fā)環(huán)境

搭建 wafer2 很簡單,大家按照官方文檔來,應(yīng)該沒什么問題的,這里就不贅述了。

生產(chǎn)環(huán)境

官方文檔說的都是開發(fā)環(huán)境,要是你想部署到生產(chǎn)環(huán)境,有些配置需要改一下。

域名

開發(fā)環(huán)境的域名是騰訊云分配的 xxx.qcloud.la,而生產(chǎn)環(huán)境需要使用自己在騰訊云里的域名。

通過騰訊云管理中心注冊的域名,會自動部署 HTTPS 證書。但是要備案的話,需要登記服務(wù)器 ip,而 wafer2 的服務(wù)器 ip 是沒有提供給我們的。目前備案只能再買一個服務(wù)器……

綁定域名后,可以在開發(fā)工具「詳情」-「騰訊云狀態(tài)」確認(rèn)生產(chǎn)環(huán)境域名:

切換到生產(chǎn)環(huán)境后,別忘了把客戶端的接口域名也改一下。

數(shù)據(jù)庫

在騰訊云管理中心里,修改生產(chǎn)環(huán)境 MySql 的登錄密碼。然后登錄 phpMyAdmin,在首頁可以看到 MySql 的服務(wù)器 ip 地址,記下來。

回到開發(fā)工具,找到 server/config.js,修改里面 MySql 配置的 ip 地址及登錄密碼:

  mysql: {
    host: '修改為生產(chǎn)環(huán)境 ip',
    port: 3306,
    user: 'root',
    db: 'cAuth',
    pass: '修改為生產(chǎn)環(huán)境密碼',
    char: 'utf8mb4'
  },

在開發(fā)工具上傳正式代碼,再到管理中心的生產(chǎn)環(huán)境,點擊「代碼部署」。這樣就完成生產(chǎn)環(huán)境的配置及部署了。

比外需要注意,開發(fā)環(huán)境的 MySql 是 5.7 的,而生產(chǎn)環(huán)境是 5.6 的。注意不要在開發(fā)的時候使用 JSON 等 MySql 5.7 才有的功能。

登錄

先說一下小程序基本都會用到的登錄。

使用

wafer2 的客戶端及服務(wù)端 sdk,已經(jīng)集成了登錄邏輯,在客戶端引用 sdk 后,只要調(diào)用它的 login 方法就可以實現(xiàn)登錄了:

qcloud.login({
  success: res => {
    console.log('登錄成功', res)
  },
  fail: err => {
    console.log('登錄失敗', err)
  }
})

登錄成功會將用戶數(shù)據(jù)保存在數(shù)據(jù)庫 cAuth 的 cSessionInfo 表里,并將用戶數(shù)據(jù)返回。

看起來很美好,但是這里面是存在一些問題的。

問題

用戶登錄過之后會將用戶信息緩存在本地,當(dāng)有緩存的時候會將用戶信息直接返回。但是 sdk 中,緩存的存取都是有問題的,有緩存的情況下,會返回 undifined。

這是個很低級的錯誤,問題已經(jīng)給官方反饋了。截止到寫這篇文章,取數(shù)據(jù)的地方改了,但存的地方還沒改……

所以現(xiàn)在要正常使用,需要到 wafer2-client-sdk/lib/login.js,找到保存用戶數(shù)據(jù)的地方:

Session.set(res.skey);

修改為:

Session.set(res);

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

也就是說,必須要獲取到用戶信息,才能實現(xiàn)登錄。而我們知道,小程序在獲取用戶信息時會彈窗,并且用戶是可以拒絕的。拒絕后一段時間內(nèi),調(diào)用 wx.getUserInfo 都不會再彈窗??梢哉f wafer2 沒有考慮用戶拒絕授權(quán)的情況。而這恰好是微信不提倡的做法,甚至可能導(dǎo)致無法通過審核。

這個問題我也向官方反饋了。

第一個接口

學(xué)習(xí)要有目的性才能保持興趣,配置完了我們來寫一個自己的接口。

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

在 server/controllers 下新建文件 hello.js,輸入如下代碼:

module.exports = async ctx => {
  ctx.state.data = "Hello World !"
}

代碼很簡單,就是暴露一個返回結(jié)果是「Hello World !」的方法,「Hello World !」會被放在請求結(jié)果的 data 里。

然后我們打開 server/routes/index.js

添加一句代碼:

// 測試接口
router.get('/hello', controllers.hello)

代碼就只有這么多。保存之后點擊「騰訊云」-「上傳測試代碼」,如果是第一次上傳要勾上「部署后自動安裝依賴」。等待上傳成功,就可以測試我們的接口了。

調(diào)用 xxx.qcloud.la/weapp/hello,看是否返回以下結(jié)果:

{
  code: 0,
  data: "Hello World !"
}

恭喜!你自己開發(fā)的第一個接口已經(jīng)調(diào)通了!

數(shù)據(jù)庫操作

wafer2 使用了 knex 作為數(shù)據(jù)庫的查詢構(gòu)造器,并且已經(jīng)配置好了。對于有 sql 經(jīng)驗的程序員,可以很快的上手。

我們可以在 phpMyAdmin 里,在 cAppinfo 這個數(shù)據(jù)庫里創(chuàng)建需要的表。

假如已經(jīng)有一個「Book」的表,下面代碼,簡單展示了在 wafer2 里,如何對數(shù)據(jù)庫進行增查改刪:

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"
}

數(shù)據(jù)庫操作默認(rèn)都是異步執(zhí)行的,如果要等待操作完成,需要在操作語句前加上 await。

關(guān)于wafer2如何實現(xiàn)輕松部署小程序后端就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI