• 黑马乐优商城项目总结


    写在前面

    这个项目大概是20天的课程,断断续续地跟着视频敲,自己完善一些简单的增删改查等等,算是基本完成了。其实只是完成了主流程,即用户搜索——放入购物车——注册——登录——下单——支付。也算是体会到了一个商城开发的不易了。这次学习全是前后端分离的,即后端只提供接口,前端调用接口。也是一种当下十分流行的结构了。在这个项目中使用了很多微服务框架(SpringCloud),很多框架都是大概知道了怎么用,有什么用就上手了。如果日后再有这方面的需求或许会加深一些理解吧。

    项目架构

    首先来看架构图:

    Tips:大致解释:前端主要使用了vue及其相关的框架来构建界面,通过nodejs来部署到服务器,请求的发送通过nginx进行转发,全部请求都要经过网关进行处理,在网关处需要进行权限的鉴定和处理,确定有对应权限后才可以转发访问微服务集群。微服务集群有很多,不同权限的用户可以访问不同的微服务。所有的请求都是由网关进行转发的,使用了相应的框架做了负载均衡,并有熔断处理。微服务与微服务之间的通知调用使用了消息队列框架来实现。最终使用了redis,mysql等来存储不同类型的数据。使用了elasticsearch来当索引库,作为搜索服务的数据库。

    使用的技术要点

    前端技术:

    • 基础的HTML、CSS、JavaScript(基于ES6标准)
    • Vue.js 2.0以及基于Vue的UI框架:Vuetify
    • 前端构建工具:WebPack
    • 前端安装包工具:NPM
    • Vue脚手架:Vue-cli
    • Vue路由:vue-router
    • ajax框架:axios
    • 基于Vue的富文本框架:quill-editor

    后端技术:

    • 基础的SpringMVC、Spring 5.0和MyBatis3
    • Spring Boot 2.0.1版本
    • Spring Cloud 最新版 Finchley.RC1
    • Redis-4.0
    • RabbitMQ-3.4
    • Elasticsearch-5.6.8
    • nginx-1.10.2
    • FastDFS - 5.0.8
    • Thymeleaf
    • JWT

    踩坑记录

    • 1.在使用PageHelper插件做分页模糊查询时,由于数据库连接参数没有正确设置导致中文参数无法被识别。

      解决方案:

        url: jdbc:mysql://localhost:3306/leyou?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
      

      以后每次写jdbc连接路径时都要写上后面的编码格式设置参数时区设置参数

    • 2.在使用了最新版本的spring-cloud和springboot后,eureka会自动导入一个jackson的解析包,使得我们的返回值都变成了xml.只需要在发起请求的类注解写上produces,里面写上JSON前缀即可。

      @RequestMapping(value = "brand",produces = MediaType.APPLICATION_JSON_VALUE)
      
    • 3.vue的相关命令:

      npm init -y  # 进行项目初始化
      npm install vue --save # 安装vue
      npm install # 安装依赖
      npm run dev # 启动项目
      
    • 4.2020.7.2号晚11点,出现了莫名其妙的BUG,最后莫名其妙的好了。仔细思考后应该是因为前端的变量名没有写好,导致后端接收不正确。这也提醒了我以后一定要先写好后端代码再去写前端,,,同时也要把逻辑理清楚,不然会出现很多莫名其妙的错误。

      前端的v-model和script里面的变量名称一定要对应起来,不然会出现意想不到的错误,同时也必须和后台接口接收的变量名对应起来。处理的时候要理清前端和前端的关系,不要太着急,要仔细理清前后端的逻辑。

    • 5.2020.7.3号晚11点 配置FastDFS配置了三个小时。从这次的配置里我学到了很多时候版本不同要配置的也不同,所以一定要跟着自己教程里的东西去配置,不要去下载最新版本什么的,因为网上的资料太层次不齐,搜到的不一定正确。还是要按照资料里给的配置去配置。同时一定要注意,配置linux的各种东西都十分繁琐,一不小心会漏掉一步,因此一定要细心细心再细心。也算对linux的一些操作有了一些了解吧。或许会在以后自己的项目中用这个配置好的FastDFS。

    • 6.关于vue里的watch执行周期:根据官方API文档所说,如下回调:

          // 该回调会在任何被侦听的对象的 property 改变时被调用,不论其被嵌套多深
          c: {
            handler: function (val, oldVal) { /* ... */ },
            deep: true
          },
      

      这样的回调会在改变时调用,而我遇到的问题是在改变时却没有被调用,因此可以使用以下的情况:

          // 该回调将会在侦听开始之后被立即调用
          d: {
            handler: 'someMethod',
            immediate: true
          },
      

      会在侦听开始后立即被调用,这样的handler方法一定会被执行。再结合deep属性即可做到立即获取对象了。

      注:我在自定义的层级选择器中和修改的表单中都加了该选项,页面就会显示完全了。

    • 7.修改品牌的业务逻辑:先把中间表的所有相关部分删除,再插入新的即可(想不到我会想这么久这玩意,好菜啊我)

    • 8.在使用axios传递数据到后台时,要使用$qs把Request Payload数据转换成表单数据,不然后台无法接收

    • 9.在vue中的方法里的赋值语句可以使用js的表达式来进行操作,如name : name == 0?null:1 这样的表达式

    • 10.非坑 在学习完该项目后去补习一下java的lamda表达式和一些其他的基础。java基础太差了.

    • 11.在redis中配置了配置文件后,需要使用

      ```sh
      redis-server redis.conf
      ```
      
      来启动已配置好的redis
      

    总结

    通过这次的大型项目,也算是了解到真正的项目是有多么的复杂。在这次的项目中,很多技术我都是第一次听说。而且很多技术都只是粗略地了解的一下,权当日后入门了吧。在这次编码过程中,发现自己的java基础还是很薄弱,暑假会再学习一下java的基础,对java的基础特性加强训练。

    源码分享

    链接:https://pan.baidu.com/s/1UFjC1gNmJEXiD1mutvD02w
    提取码:clsy

  • 相关阅读:
    angularJS之路由
    angularJS之ng-repeat
    智能算法之Matlab实现(1)——遗传算法(1)
    如何快速处理线上故障
    测试计划怎么写
    接口测试基础
    HTTP 的一些问题
    DevOps简介
    什么是DevOps?
    HTTPS 如何保证数据传输的安全性
  • 原文地址:https://www.cnblogs.com/wushenjiang/p/13333961.html
Copyright © 2020-2023  润新知