Vue+Express全栈购物商城
栏目: JavaScript · 发布时间: 5年前
内容简介:基于Vue和Express框架写的一个全栈购物商城,记录项目过程中遇到的一些问题以及经验和技巧。在线预览:
一、前言提纲
基于Vue和Express框架写的一个全栈购物商城,记录项目过程中遇到的一些问题以及经验和技巧。
二、历史版本
- 基于Vue-CLI2.0: 点我查看
这个分支版本是一两年前的,基于Vue-CLI2.0写的,数据请求是Mock,纯前端的项目。
- 基于 Vue-CLI3.0: 点我查看
这个分支版本是基于Vue-CLI3.0的,将脚手架从2.0迁移升级到了3.0,遇到的一些问题和坑也都填完了~也是纯Web端Mock模拟数据的项目。
- 当前版本: 点我查看
基于Vue-CLI3.0,前端用Vue全家桶,后端用Express+MongoDB+Redis,后台管理系统CMS是用的Vue-Element-Admin
三、详情
1.前端
在线预览: https://www.fancystore.cn
手机直接扫描二维码真机体验:
1.1 技术栈:
- Vue全家桶(Vue-CLI3,Vue2.x)
- Vue-Router(页面KeepAlive的处理)
- Vuex(状态管理库,刷新保存状态)
- Axios(二次封装配置的数据请求)
- Less(CSS预处理)
- I18n(国际化处理)
- Vant(UI库,按需加载+rem)
- SEO(预渲染)
- Sentry(线上错误日志监控)
- Travic(自动构建,持续部署)
1.2适配
项目代码px自动转换为rem,需要在 main.js 中引入 amfe-flexible 库
Vant UI库也有REM单位,需要在 vue.config.js 中配置:
1.3 SEO
单页(SPA)SEO是一个痛点,目前有两种方式,一种是 SSR ,一种是 预渲染(PrerenderSPAPlugin) 。
这个项目是用 预渲染(PrerenderSPAPlugin) + vue-meta-info 这两个库来做SEO优化的。
- 将 rouer.js 模式改为 mode:history
-
下载安装PrerenderSPAPlugin
PrerenderSPAPlugin是Google的一个库,基于Chromium是获取数据,安装PrerenderSPAPlugin的时候会自动下载Chromium浏览器,国内npm安装Chromium会经常安装失败,建议用淘宝的cnpm安装
npm install -g cnpm --registry=https://registry.npm.taobao.org cnpm install PrerenderSPAPlugin --save
- 在 vue.config.js 中引入 PrerenderSPAPlugin ,配置需要预渲染的路由。
-
下载安装 vue-meta-info
在main.js中引入vue-meta-info,在每个页面配置meta信息,这样每个单页路由都有不同的title,理由爬虫引擎抓取重要内容,利于SEO。
预渲染前只有一个index.html,预渲染后最后打包出来的预渲染目录文件如下:
1.4 路由懒加载以及缓存keep-alive动的态判断
项目中会使用 keep-alive 会提高用户体验和网站的性能,如果想实现部分页面缓存,部分页面不需要缓存,可以在 router.js 里面的路由添加 meta.keepalive 在跟router-vier加入判断:
1.5 Vuex状态管理页面刷新失效问题
用Vuex管理全局的状态,会遇到刷新页面的时候所有的状态丢失或者重置,可以在 App.vue 的钩子函数添加代码,会在页面刷新的时候将Vuex存储到Storage中,刷新完成后又再从Storage取出来存到Vuex里面:
1.6 封装数据请求
封装Axios,添加Axios请求(request)和相应(response),统一处理错误信息或者登录认证的消息,所有的数据请求都存放到 api 目录下,对应的页面方便后续的维护和管理。
1.7 打包构建优化vue.config.js
- 区分开发环境和生产环境
- alias的方式直接指定目录。
-
CDN
生产环境中将一些共有库Vue,vuex,vue-router等库不打包到项目中,而是通过CDN的方式引入这些共有库,这样可以减少项目的大小,也可以借助CDN的优势,让网站加载更快。推荐一个强大的cdn库:[https://www.bootcdn.cn/](https://www.bootcdn.cn/)
- 生产环境压缩和出去console打印日志
- 生产环境开启gzip压缩
- 生产环境启用预渲染
- 生产环境分离css,外链CSS可以缓存
1.7 错误日志监控Sentry
集成 Sentry 开源日志监控系统,在官网注册获取 key ,在 main.js 中引入 RavenVue 并配置即可
1.8 自动构建和持续集成
Github自动构建和持续集成基于 Travis
- 登录 Travis 选择需要持续集成的项目。
- 在.travis.yml写上相应的config,服务器配置ssh_key,
-
每次代码push到指定分支(比如master)的时候,Travis会自动执行项目上的.travis.yml文件,开始自动构建,构建成功通过scp密令传送到服务器,完成自动部署的功能。
每次需要发版,只需要push代码,然后去喝杯咖啡,回来就已经构建发布完成,解放劳动力
1.9 代码自动格式化优化
团队合作的时候,每个成员用的编辑器不同,缩进格式也不同,这样合并代码的时候会出现各种意外的情况,团队统一编辑器和编辑器不太现实,因为每个人的写代码习惯和风格不一致。可以借助husky 和 link-stage,每次commit的时候都会安装配置的规则格式化代码,参考文章: https://segmentfault.com/a/1190000009546913
1.10代码优化
- 设计模式
表单验证需要写很多判断条件,if-else 或者swith,当条件越多时或者后面需要修改需求条件的时候,会变得不是很好维护,可以用 策略模式 来重构业务代码:
- 善用Mixin,提取共用的组件,将项目组件化
Vue的Mixin复用代码,可以更好的提高开发效率和可维护性
除了将一些共用的页面做成组件引入的方式之外,大文件项目也分好几个模块,将文件才成模块的方式会更好维护和更好的阅读。
2.服务端
2.1 技术栈:
- Node
- Express
- Mongo
- Mongoose
- Redis
- Qiniu
- PM2
2.2 登录授权
用Session认证机制,来实现登录登出。
配置Session的加密解密,将Session存储到Redis,提高性能,如果有多台服务器,Redis可以共享Session。
2.3 中间件判断用户是否登录:
有些API请求是需要用户登录才可以访问的,可以写中间件来判断:
2.4 中间件判断用户的权限:
有些API的请求是需要判断用户是否有权限,比如添加、删除和更新,会在中间件判断是否有权限
2.5 PM2多进程启动项目
2.6 Mongodb 优化设置索引
2.7 Redis 做缓存
2.8 七牛云对象存储配置Key还有域名的绑定以及HTTPS证书的申请
3.后台管理系统CMS
在线预览: https://www.fancystore.cn/admin
3.1技术栈
配合后端做了权限系统,根据用户的权限来展示和隐藏菜单和按钮。
4.服务器
- Nginx配置gzip和缓存策略,根据不同的 URL来代理。
- 申请HTTPS证书,全站升级到HTTPS,配置HTTP2.0的协议。
Github:
前端: https://github.com/czero1995/fancy-store
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- day2编写购物商城(1)
- python简单商城购物车实例代码
- (三)购物商城数据库设计-商品表DDL(Mysql)
- 幸福团商城 助您带给用户流畅的购物体验
- 基于商城实例的小程序购物车云函数操作
- eweapp 功能更新,ECShop 微信小程序商城购物车
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Text Processing in Python
David Mertz / Addison-Wesley Professional / 2003-6-12 / USD 54.99
Text Processing in Python describes techniques for manipulation of text using the Python programming language. At the broadest level, text processing is simply taking textual information and doing som......一起来看看 《Text Processing in Python》 这本书的介绍吧!