之前次要说的是,我是如何产生这个圈子小程序的想法和如何上线的。有趣味的敌人能够回去参考后面两篇文章。这次来给大家讲讲,在技术上是如何实现的。
我是如何一个月内把想法变成产品的
技术栈前端次要是基于Taro+Typescript+dva框架实现的,后端基本上是以Ruby on Rails为主。
这里说下为什么要做这样的技术选型,对于技术选型,在《奔跑吧,程序员》一书中有很具体的剖析,前面我会我在我的读书笔记系列把这本书做一次分享。
这里次要说下技术选型次要判断,如果是疾速成型的我的项目,应该抉择更加轻量的语言和有大量社区组件反对的,另外一个就是本人相熟的。
前端
为什么用Taro?次要是以往本身经验决定的,认为自身我做了13年技术研发,尽管前面几年本人入手的工夫少了,但也算在一线工作。前几年React Native刚衰亡的时候,对于有着js开发教训和安卓开发教训的我很快就上手。借着之前饿了么做hybrid和挪动端动静模板渲染的教训,让我迅速了解了React的设计理念和原理。
所以这次就顺利的用了以React为主的Taro前端开发框架,尽管uni-app赫赫有名,但毕竟要从新理解vue。原先redux那一套回顾起来绝对比拟快。这里不去争执对错,能让你舒舒服服的疾速实现,那么就是对的。
说回Typescript,记得以前写js碰到最大的问题是无奈提醒,对于咱们这种全栈开发来说,切换太快了,所以会花很多工夫查他上面有哪些办法等,为了节俭代码量,有段时间还疯狂的写coffee script。尽管我的项目里写的还不是很标准,但的确解决了我很大一块问题。
看到这里必定有人想说,那是你没用对。就如同Vim、Emacs一样,很多人感觉太不便了,为此我还专门花了工夫去学vim的快捷键。然而最初用起来还是习惯不了,切换模式dd删除,我还是比拟喜爱在VS Code里用command + x 来当删除用,十几年的习惯,不是说改就改的。
还是那句,没有对错,只有你本人习惯就好。
后端
其实这几年写的比拟多少的还是Java,但这里就不多说了,当初的我的项目也没做过太大的压测,但如果用户量大到扛不住,那么再说苦涩的懊恼问题。从新花工夫调研了下Ruby on Rails,发现新增了很多个性,如Job、ActiveStroge、Webpack、turbolinks等等,对于全栈开发来说反对越来越好了。
最重要的是Ruby on Rails对测试的反对十分好,我集体习惯就是如果代码没有测试笼罩,我很容易改出问题,因为工夫久了或者对这块业务不相熟了,很容易有问题呈现。
小程序我的项目构造
先丢张根本的结构图让大家理解下
pages 是小程序所有主页面的目录models 是数据层,负责获取近程数据和解决数据的components是组件层,次要是一些组件和放复用页面的services是网络层,次要是各种api调用的utils是各种帮忙类大略的流程是这样的,这里不做过多解说,有趣味的敌人本人去看dva框架和redux。
上面次要这次开发圈子小程序碰到的一些问题和我解决的思路和形式,如果你有更好的,欢送找我交换。
登录
说真的,登录是十分烦人的一件事。之前始终有肯定的概率呈现**Error: error:06065064:digital enveloperoutines:EVP_DecryptFinal_ex:bad decrypt**,起初在官网的文档中找到:
在bindgetphonenumber 等返回加密信息的回调中调用 wx.login 登录,可能会刷新登录态。此时服务器应用 code 换取的 sessionKey 不是加密时应用的 sessionKey,导致解密失败。倡议开发者提前进行 login;或者在回调中先应用 checkSession 进行登录态查看,防止 login 刷新登录态。所以起初我调整成
在进入页面后,会进行一次login,而后把获取的code保存起来当用户点击登录按钮,会再一次进行checkSession查看,防止登录态生效而后把获取到的code, encryptedData, iv全副提交到服务器进行解密和校验Textarea穿透问题
圈子小程序里有个性能,用户能够评论某个人的帖子,而后会导致一个问题,就是底层的输入框会在弹层下层。具体能够参考上面这张图,我过后没截图。无论你怎么设置z-index都没用。
导致这个问题的起因是,Textarea是原生组件,层级会高于网页组件,所以我是这样解决的。
当Textarea失去焦点后,把内容存储到内存里暗藏Textarea,并显示一个View填充之前缓存的内容不过这样做又会导致另外一个问题,有可能因为焦点问题,缓存里没内容,用户间接点了发送按钮,这个时候就须要判断提交的内容里有没内容,有就间接提交,没有就用缓存里的。都没有就做非空提醒。
还有就是有同学提到,输入框会被键盘盖住的问题。相似下图
这里解决形式也绝对比拟好解决,参考官网文档这个属性
dva-model-extend和model层
往往在实现逻辑的工夫发现很蛋疼的问题,就是几个页面逻辑差不多,但有有点不太一样,而后这个页面又耦合了一些其余模块的逻辑。最常见的例如上面这个。
上图外面几块业务就波及了圈子、帖子、用户、赞、评论逻辑,还有本人页面的一些逻辑,那么咱们应该怎么去划分呢?大家能够参考下图
...