美文网首页我爱编程
小程序从前端到后端到演示的技术总结

小程序从前端到后端到演示的技术总结

作者: JocobZling | 来源:发表于2018-03-03 18:14 被阅读0次

    算是拖了很久的一篇总结,明天就要回学校了,想了想还是不要把有些东西拖到开学后所以就动起手来。
    前半段算是对假期对前半年的一个小的总结,如果你只关注小程序的相关内容的话可以直接跳过这里。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进行传递是非常不理智的,官方也有相应的要求,如下图

    image.png

    跟官方略有不同,我采用的是jsonwebtoken,根据openid在后台生成一段校验码传回前端来维持登录状态,每个子功能页面加载的时候都对我的jwt验证码进行校验,销毁的时间设置成跟session_key一样,自己的jwtSecret随意设置一下即可~

    感觉我已经说清楚了,附上一些代码供给大家参考吧。


    前端代码.png
    后端代码1.png
    后端代码2.png

    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的数据库转化为关系型数据库处理的味道

    demo1.png
    查询操作.png

    4.最后说一下部署使用的natapp(内网穿透)

    非常的便捷和操作简单---->比起一些云来说吧,毕竟微信小程序要求必须要https协议且有域名下才能发送request请求,这对真机调试或者演示都十分不方便,有了natapp就很快的解决这个问题了具体操作大家看看官网的1分钟教程,我就不多说了~链接


    差不多就这样了,之后想起来什么再补充吧~

    相关文章

      网友评论

        本文标题:小程序从前端到后端到演示的技术总结

        本文链接:https://www.haomeiwen.com/subject/vgwtfftx.html