算是拖了很久的一篇总结,明天就要回学校了,想了想还是不要把有些东西拖到开学后所以就动起手来。
前半段算是对假期对前半年的一个小的总结,如果你只关注小程序的相关内容的话可以直接跳过这里。2018的对我来说最重要的可能就是考研了,毕竟像我们这样的双非普通超级普通学校的学生不努力是没有办法,所以整个假期基本都在看高数啊,英语之类的,感觉进步很小也不像做出一个demo那样有成就感,不管怎么样还是希望自己坚持吧。
言归正传,因为年前参加了一个小程序的小型比赛,进行了诸多尝试,就想总结一波,其中若有问题欢迎大家跟我来讨论。
可能我的理解还很浅薄,我在进行小程序的编程中,感觉他跟开发网页有很多的共同点,基本上也是运用着前后端分离的办法,前端主要依赖于微信的开发者工具,主要是可以进行预览的功能,具体的编码我还是使用了我最喜欢的webstorm(当然可以使用:subline/vscode)装一些相应的插件就可以进行编码,这里我把我使用的webstorm的插件提供给大家(来源:github)感谢源作者的贡献,蛮好用的虽然format样式或者js的时候会出错不过问题不大。
感觉还是啰嗦了蛮久,想了一下怎么样来总结,先写一下我用到的一些技术,其次补充一些知识要点吧(emmmm此刻还记得的)
前端部分
- 微信小程序的api接口
- 样式有用到一些weiui
说实话我不知道在这部分能说些什么,因为真的官方的文档内给了最完整最全面的内容,我就简单说一些可能不仔细看文档会遇到的问题吧
后端部分
- nodejs
- mongodb
- java
使用java做后台主要是应付学校作业的一个尝试,顺便也在这里总结下吧,因为发现很多人不太会有java作为小程序的后台?
部署部分
- natapp
一些技术要点
1. 获取用户相关信息及维护session状态
这个是我一开始理解的一个难点,所以在这里就跟大家多说几句,可能很多人都认为微信小程序是没有必要维持session状态的,就像我们浏览器登录之后会维护的一个会话状态,这个理解首先就是错误的,试想:一个没有登录的用户就可以随意访问你后台的api这是多么恐怖的一件事情。微信官方当然也想到了这么一点所以提供非常完善的一套方案(详见腾讯云小程序的解决方案)当然穷苦的学生党没有使用那个,是自己维护的这个状态,具体内容如下:
####wx.login(OBJECT)
调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。
注:调用 login 会引起登录态的刷新,之前的 sessionKey 可能会失效。
可能很多人都知道这个,但是都没有get到核心就像一开始的我也是一团污水,https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html 其实官方文档写的非常的清楚,按照我的理解梳理一遍:前端调用登录接口,并且向后端发送code,后端接收到后再向微信小程序的服务端发起请求,获取用户的唯一标识(openid) 及本次登录的会话密钥(session_key)这个就是我对官方登录时序图一个最通俗的最不严谨的理解了吧~
当然我们如果直接把session_key
进行传递是非常不理智的,官方也有相应的要求,如下图
跟官方略有不同,我采用的是jsonwebtoken
,根据openid
在后台生成一段校验码传回前端来维持登录状态,每个子功能页面加载的时候都对我的jwt验证码进行校验,销毁的时间设置成跟session_key
一样,自己的jwtSecret
随意设置一下即可~
感觉我已经说清楚了,附上一些代码供给大家参考吧。
ps:有时候会发生验证失败的问题,这很费解,希望有尝试过的朋友能一起交流一下
2. nodejs一些新get的插件吧
这里只写了这次完成小程序新get的一些插件,一些常用必备的什么express,fs,moment,path我就不多说了,虽然我后台还是使用的express框架,但是在学习途中顺便了解了一下koa
,官方实例用的是这个也很便捷,有机会可以用用这个
- nodemon
修改后台代码后可以自己启动 - jsonwebtokon 生成验证码的工具,之前说过不重复了
- mongoose
第一次使用mongodb作为数据库学习的,感觉还不错 - axios
发请求的工具
在windows下发请求传递中文时会出现编码问题,挺坑的纠结了很久一直以为是自己代码写的有问题,在ubuntu下就不会有这样的问题,解决的方式是
let sign=encodeURI(req.query.sign);//转成URL编码即可
如果也遇到了这个问题可以尝试一下~
3.使用mongodb踩下的坑
说起这个内容感觉又是一段辛酸泪……在windows下使用这些的我就有些作死,不管是nodejs还是mongodb感觉还是跟mac或者ubuntu更搭配,可是为什么微信开发者工具没有ubuntu版呢,qaq穷苦人民买不起mac,如果你不使用windows就没必要看这个咯
window 安装MongoDB 出现的exception:connect failed 异常的问题
说实话这个解答在网上有很多很多,当然大部分是坑就是了Orz,我这里可以成功使用的方法http://blog.csdn.net/rudy24/article/details/78300907,必须码住!使用的图形化界面
NoSQLBooster for MongoDB
方便好用值得拥有mongoose使用
第一次使用mongodb怎么说还是满坑的,不管是从一开始表的设计,还是后来在文档内进行查询,都是在给自己设坑,简单记录一下吧。
Mongose中,有三个比较重要的概念,分别是Schema、Model、Entity。它们的关系是:Schema生成Model,Model创造Document,Model和Document都可对数据库操作造成影响,但Model比Document更具操作性
Schema用于定义数据库的结构。类似创建表时的数据定义(不仅仅可以定义文档的结构和属性,还可以定义文档的实例方法、静态模型方法、复合索引等),每个Schema会映射到mongodb中的一个collection,Schema不具备操作数据库的能力
Model是由Schema编译而成的构造器,具有抽象属性和行为,可以对数据库进行增删查改。Model的每一个实例(instance)就是一个文档document
Document是由Model创建的实体,它的操作也会影响数据库
怎么说以上也都是我搬来的,具体操作的来理解的话,就是在nodejs中创建model,然后直接调用model进行查询非常便捷,看网上的一些教程大家都有说有点把nosql的数据库转化为关系型数据库处理的味道
4.最后说一下部署使用的natapp(内网穿透)
非常的便捷和操作简单---->比起一些云来说吧,毕竟微信小程序要求必须要https协议且有域名下才能发送request请求,这对真机调试或者演示都十分不方便,有了natapp就很快的解决这个问题了具体操作大家看看官网的1分钟教程,我就不多说了~链接
差不多就这样了,之后想起来什么再补充吧~