算是拖了很久的一篇總結(jié),明天就要回學(xué)校了伺帘,想了想還是不要把有些東西拖到開(kāi)學(xué)后所以就動(dòng)起手來(lái)躲叼。
前半段算是對(duì)假期對(duì)前半年的一個(gè)小的總結(jié)蔬捷,如果你只關(guān)注小程序的相關(guān)內(nèi)容的話可以直接跳過(guò)這里厉亏。2018的對(duì)我來(lái)說(shuō)最重要的可能就是考研了董习,畢竟像我們這樣的雙非普通超級(jí)普通學(xué)校的學(xué)生不努力是沒(méi)有辦法,所以整個(gè)假期基本都在看高數(shù)啊爱只,英語(yǔ)之類的皿淋,感覺(jué)進(jìn)步很小也不像做出一個(gè)demo那樣有成就感,不管怎么樣還是希望自己堅(jiān)持吧恬试。
言歸正傳窝趣,因?yàn)槟昵皡⒓恿艘粋€(gè)小程序的小型比賽,進(jìn)行了諸多嘗試训柴,就想總結(jié)一波哑舒,其中若有問(wèn)題歡迎大家跟我來(lái)討論。
可能我的理解還很淺薄幻馁,我在進(jìn)行小程序的編程中洗鸵,感覺(jué)他跟開(kāi)發(fā)網(wǎng)頁(yè)有很多的共同點(diǎn),基本上也是運(yùn)用著前后端分離的辦法仗嗦,前端主要依賴于微信的開(kāi)發(fā)者工具膘滨,主要是可以進(jìn)行預(yù)覽的功能,具體的編碼我還是使用了我最喜歡的webstorm(當(dāng)然可以使用:subline/vscode)裝一些相應(yīng)的插件就可以進(jìn)行編碼儒将,這里我把我使用的webstorm的插件提供給大家(來(lái)源:github)感謝源作者的貢獻(xiàn)吏祸,蠻好用的雖然format樣式或者js的時(shí)候會(huì)出錯(cuò)不過(guò)問(wèn)題不大。
感覺(jué)還是啰嗦了蠻久钩蚊,想了一下怎么樣來(lái)總結(jié)贡翘,先寫一下我用到的一些技術(shù),其次補(bǔ)充一些知識(shí)要點(diǎn)吧(emmmm此刻還記得的)
前端部分
- 微信小程序的api接口
- 樣式有用到一些weiui
說(shuō)實(shí)話我不知道在這部分能說(shuō)些什么砰逻,因?yàn)檎娴墓俜降奈臋n內(nèi)給了最完整最全面的內(nèi)容鸣驱,我就簡(jiǎn)單說(shuō)一些可能不仔細(xì)看文檔會(huì)遇到的問(wèn)題吧
后端部分
- nodejs
- mongodb
- java
使用java做后臺(tái)主要是應(yīng)付學(xué)校作業(yè)的一個(gè)嘗試,順便也在這里總結(jié)下吧蝠咆,因?yàn)榘l(fā)現(xiàn)很多人不太會(huì)有java作為小程序的后臺(tái)踊东?
部署部分
- natapp
一些技術(shù)要點(diǎn)
1. 獲取用戶相關(guān)信息及維護(hù)session狀態(tài)
這個(gè)是我一開(kāi)始理解的一個(gè)難點(diǎn),所以在這里就跟大家多說(shuō)幾句刚操,可能很多人都認(rèn)為微信小程序是沒(méi)有必要維持session狀態(tài)的闸翅,就像我們?yōu)g覽器登錄之后會(huì)維護(hù)的一個(gè)會(huì)話狀態(tài),這個(gè)理解首先就是錯(cuò)誤的菊霜,試想:一個(gè)沒(méi)有登錄的用戶就可以隨意訪問(wèn)你后臺(tái)的api這是多么恐怖的一件事情坚冀。微信官方當(dāng)然也想到了這么一點(diǎn)所以提供非常完善的一套方案(詳見(jiàn)騰訊云小程序的解決方案)當(dāng)然窮苦的學(xué)生黨沒(méi)有使用那個(gè),是自己維護(hù)的這個(gè)狀態(tài)鉴逞,具體內(nèi)容如下:
####wx.login(OBJECT)
調(diào)用接口獲取登錄憑證(code)進(jìn)而換取用戶登錄態(tài)信息记某,包括用戶的唯一標(biāo)識(shí)(openid) 及本次登錄的 會(huì)話密鑰(session_key)等司训。用戶數(shù)據(jù)的加解密通訊需要依賴會(huì)話密鑰完成。
注:調(diào)用 login 會(huì)引起登錄態(tài)的刷新液南,之前的 sessionKey 可能會(huì)失效壳猜。
可能很多人都知道這個(gè),但是都沒(méi)有g(shù)et到核心就像一開(kāi)始的我也是一團(tuán)污水滑凉,https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html 其實(shí)官方文檔寫的非常的清楚统扳,按照我的理解梳理一遍:前端調(diào)用登錄接口,并且向后端發(fā)送code畅姊,后端接收到后再向微信小程序的服務(wù)端發(fā)起請(qǐng)求闪幽,獲取用戶的唯一標(biāo)識(shí)(openid) 及本次登錄的會(huì)話密鑰(session_key)這個(gè)就是我對(duì)官方登錄時(shí)序圖一個(gè)最通俗的最不嚴(yán)謹(jǐn)?shù)睦斫饬税蓗
當(dāng)然我們?nèi)绻苯影?code>session_key進(jìn)行傳遞是非常不理智的,官方也有相應(yīng)的要求涡匀,如下圖
跟官方略有不同,我采用的是jsonwebtoken
溉知,根據(jù)openid
在后臺(tái)生成一段校驗(yàn)碼傳回前端來(lái)維持登錄狀態(tài)陨瘩,每個(gè)子功能頁(yè)面加載的時(shí)候都對(duì)我的jwt驗(yàn)證碼進(jìn)行校驗(yàn),銷毀的時(shí)間設(shè)置成跟session_key
一樣级乍,自己的jwtSecret
隨意設(shè)置一下即可~
感覺(jué)我已經(jīng)說(shuō)清楚了舌劳,附上一些代碼供給大家參考吧。
ps:有時(shí)候會(huì)發(fā)生驗(yàn)證失敗的問(wèn)題玫荣,這很費(fèi)解甚淡,希望有嘗試過(guò)的朋友能一起交流一下
2. nodejs一些新get的插件吧
這里只寫了這次完成小程序新get的一些插件,一些常用必備的什么express捅厂,fs贯卦,moment,path我就不多說(shuō)了焙贷,雖然我后臺(tái)還是使用的express框架撵割,但是在學(xué)習(xí)途中順便了解了一下koa
,官方實(shí)例用的是這個(gè)也很便捷辙芍,有機(jī)會(huì)可以用用這個(gè)
- nodemon
修改后臺(tái)代碼后可以自己?jiǎn)?dòng) - jsonwebtokon 生成驗(yàn)證碼的工具啡彬,之前說(shuō)過(guò)不重復(fù)了
- mongoose
第一次使用mongodb作為數(shù)據(jù)庫(kù)學(xué)習(xí)的,感覺(jué)還不錯(cuò) - axios
發(fā)請(qǐng)求的工具
在windows下發(fā)請(qǐng)求傳遞中文時(shí)會(huì)出現(xiàn)編碼問(wèn)題故硅,挺坑的糾結(jié)了很久一直以為是自己代碼寫的有問(wèn)題庶灿,在ubuntu下就不會(huì)有這樣的問(wèn)題,解決的方式是
let sign=encodeURI(req.query.sign);//轉(zhuǎn)成URL編碼即可
如果也遇到了這個(gè)問(wèn)題可以嘗試一下~
3.使用mongodb踩下的坑
說(shuō)起這個(gè)內(nèi)容感覺(jué)又是一段辛酸淚……在windows下使用這些的我就有些作死吃衅,不管是nodejs還是mongodb感覺(jué)還是跟mac或者ubuntu更搭配往踢,可是為什么微信開(kāi)發(fā)者工具沒(méi)有ubuntu版呢,qaq窮苦人民買不起mac捐晶,如果你不使用windows就沒(méi)必要看這個(gè)咯
window 安裝MongoDB 出現(xiàn)的exception:connect failed 異常的問(wèn)題
說(shuō)實(shí)話這個(gè)解答在網(wǎng)上有很多很多菲语,當(dāng)然大部分是坑就是了Orz妄辩,我這里可以成功使用的方法http://blog.csdn.net/rudy24/article/details/78300907,必須碼咨缴稀眼耀!使用的圖形化界面
NoSQLBooster for MongoDB
方便好用值得擁有mongoose使用
第一次使用mongodb怎么說(shuō)還是滿坑的,不管是從一開(kāi)始表的設(shè)計(jì)佩憾,還是后來(lái)在文檔內(nèi)進(jìn)行查詢哮伟,都是在給自己設(shè)坑,簡(jiǎn)單記錄一下吧妄帘。
Mongose中楞黄,有三個(gè)比較重要的概念,分別是Schema抡驼、Model鬼廓、Entity。它們的關(guān)系是:Schema生成Model致盟,Model創(chuàng)造Document碎税,Model和Document都可對(duì)數(shù)據(jù)庫(kù)操作造成影響,但Model比Document更具操作性
Schema用于定義數(shù)據(jù)庫(kù)的結(jié)構(gòu)馏锡。類似創(chuàng)建表時(shí)的數(shù)據(jù)定義(不僅僅可以定義文檔的結(jié)構(gòu)和屬性雷蹂,還可以定義文檔的實(shí)例方法、靜態(tài)模型方法杯道、復(fù)合索引等)匪煌,每個(gè)Schema會(huì)映射到mongodb中的一個(gè)collection,Schema不具備操作數(shù)據(jù)庫(kù)的能力
Model是由Schema編譯而成的構(gòu)造器党巾,具有抽象屬性和行為萎庭,可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪查改。Model的每一個(gè)實(shí)例(instance)就是一個(gè)文檔document
Document是由Model創(chuàng)建的實(shí)體齿拂,它的操作也會(huì)影響數(shù)據(jù)庫(kù)
怎么說(shuō)以上也都是我搬來(lái)的擎椰,具體操作的來(lái)理解的話,就是在nodejs中創(chuàng)建model创肥,然后直接調(diào)用model進(jìn)行查詢非常便捷达舒,看網(wǎng)上的一些教程大家都有說(shuō)有點(diǎn)把nosql的數(shù)據(jù)庫(kù)轉(zhuǎn)化為關(guān)系型數(shù)據(jù)庫(kù)處理的味道
4.最后說(shuō)一下部署使用的natapp(內(nèi)網(wǎng)穿透)
非常的便捷和操作簡(jiǎn)單---->比起一些云來(lái)說(shuō)吧,畢竟微信小程序要求必須要https協(xié)議且有域名下才能發(fā)送request請(qǐng)求叹侄,這對(duì)真機(jī)調(diào)試或者演示都十分不方便巩搏,有了natapp就很快的解決這個(gè)問(wèn)題了具體操作大家看看官網(wǎng)的1分鐘教程,我就不多說(shuō)了~鏈接
差不多就這樣了趾代,之后想起來(lái)什么再補(bǔ)充吧~