All Projects → Chocolate1999 → Vue Family Bucket Ssr Koa2 Full Stack Development From Meituan

Chocolate1999 / Vue Family Bucket Ssr Koa2 Full Stack Development From Meituan

🚀🚀2020最新Vue全家桶+SSR+Koa2全栈开发☁

Projects that are alternatives of or similar to Vue Family Bucket Ssr Koa2 Full Stack Development From Meituan

Blog Service
blog service @nestjs
Stars: ✭ 188 (+88%)
Mutual labels:  mongoose, redis, mongodb, koa
Lad
👦 Lad is the best Node.js framework. Made by a former Express TC and Koa team member.
Stars: ✭ 2,112 (+2012%)
Mutual labels:  mongoose, redis, mongodb, koa
Nuxt Ssr
✨vue+nuxt+sass+node+express+MongoDB 实现的SSR项目。
Stars: ✭ 323 (+223%)
Mutual labels:  mongodb, nuxtjs, ssr, element-ui
Vue Element Responsive Demo
基于 Vue + Element 的响应式后台模板
Stars: ✭ 54 (-46%)
Mutual labels:  mongoose, redis, mongodb, element-ui
nodejs-koa-blog
基于 Node.js Koa2 实战开发的一套完整的博客项目网站
Stars: ✭ 1,611 (+1511%)
Mutual labels:  koa, nuxtjs, element-ui
Blog2.0
基于Nuxt(ssr)+Vuetify+elementUi+nodeExpress+mongoDb的个人博客全栈项目
Stars: ✭ 20 (-80%)
Mutual labels:  mongoose, nuxtjs, element-ui
Practice
💦 你没有见过的终极实战
Stars: ✭ 283 (+183%)
Mutual labels:  mongoose, redis, koa
Jianshu
仿简书nx+nodejs+nestjs6+express+mongodb+angular8+爬虫
Stars: ✭ 296 (+196%)
Mutual labels:  mongoose, redis, mongodb
Doracms
DoraCMS是基于Nodejs+eggjs+mongodb编写的一套内容管理系统,结构简单,较目前一些开源的cms,doracms易于拓展,特别适合前端开发工程师做二次开发。
Stars: ✭ 3,180 (+3080%)
Mutual labels:  mongodb, ssr, element-ui
Ktv Select music System
KTV点歌系统,含后台管理系统(完整版)
Stars: ✭ 305 (+205%)
Mutual labels:  mongodb, koa, element-ui
Docker Vue Node Nginx Mongodb Redis
🐉 An awesome boilerplate, Integrated Docker, Vue, Node, Nginx, Mongodb and Redis in one, Designed to develop & build your web applications more efficient and elegant.
Stars: ✭ 34 (-66%)
Mutual labels:  redis, mongodb, element-ui
Graphql Demo
🎉Koa + GraphQL + Apollo-Server demo
Stars: ✭ 215 (+115%)
Mutual labels:  mongoose, mongodb, koa
Nobibi
一款基于Next.js+mongo的轻量级开源社区(open community by Next.js & mongo)
Stars: ✭ 209 (+109%)
Mutual labels:  mongoose, mongodb, koa
Nuxt Blog
基于Nuxt.js服务器渲染(SSR)搭建的个人博客系统
Stars: ✭ 277 (+177%)
Mutual labels:  mongoose, mongodb, ssr
Node Express Mongodb Jwt Rest Api Skeleton
This is a basic API REST skeleton written on JavaScript using async/await. Great for building a starter web API for your front-end (Android, iOS, Vue, react, angular, or anything that can consume an API). Demo of frontend in VueJS here: https://github.com/davellanedam/vue-skeleton-mvp
Stars: ✭ 603 (+503%)
Mutual labels:  mongoose, redis, mongodb
Virapro.ru
[E-commerce] Plumbing Store
Stars: ✭ 45 (-55%)
Mutual labels:  nuxtjs, ssr, element-ui
Express Graphql Mongodb Boilerplate
A boilerplate for Node.js apps / GraphQL-API / Authentication from scratch - express, graphql - (graphql compose), mongodb (mongoose).
Stars: ✭ 288 (+188%)
Mutual labels:  mongoose, redis, mongodb
Koa Vue Fullstack
A lightweight boilerplate for a universal webapp based on koa, mongodb, node, vue, and webpack
Stars: ✭ 126 (+26%)
Mutual labels:  mongoose, mongodb, koa
Questionnaire
📋 问卷系统
Stars: ✭ 128 (+28%)
Mutual labels:  mongoose, mongodb, element-ui
Naice Blog
😺 新的博客上线啦
Stars: ✭ 93 (-7%)
Mutual labels:  mongodb, koa, ssr

Vue全家桶+SSR+Koa2 全栈开发仿美团网

☀☀☀

项目地址: https://github.com/Chocolate1999/Vue-family-bucket-SSR-Koa2-full-stack-development-from-Meituan

学习地址:传送门

项目介绍

融汇 前端+服务端 全栈项目,提供后端数据接口,源码开放,可进行二次开发与优化。

主要业务

  • 首页
  • 登录/注册
  • 产品列表
  • 产品详情
  • 购物车
  • 订单

技术内容

  • 使用 nuxt.jskoa2 两者之间做 SSR
  • 数据和状态同步,使用 Vuex
  • 前端使用最新版 Vue 语法Vue Cli
  • 后端使用 koa2 ,对应的是 redismongodb
  • 使用了数据对象模型管理工具 mongoose
  • 采用饿了么 element-ui 框架构建页面,简洁,美观
  • 数据真实,杜绝 Mock ,逼真体验

项目重点

Column 1 Column 2 Column 3
登录/注册 SMTP服务 城市服务
推荐服务 搜索服务 地图服务
购物车 订单设计 组件复用设计
接口设计 数据对象模型 思维&技巧

项目笔记

【Vue全家桶+SSR+Koa2全栈开发】(一)Vue基础

【Vue全家桶+SSR+Koa2全栈开发】(二)Vuex基础

【Vue全家桶+SSR+Koa2全栈开发】(三)Koa2基础

【Vue全家桶+SSR+Koa2全栈开发】(四)mongoose基础

【Vue全家桶+SSR+Koa2全栈开发】(五) Redis基础

【Vue全家桶+SSR+Koa2全栈开发】(六) Nuxt.js基础

【Vue全家桶+SSR+Koa2全栈开发】(七) 项目搭建与配置

【Vue全家桶+SSR+Koa2全栈开发】学习笔记整合 (全)

项目运行步骤

本项目提供开发时的源码,可以进行二次开发及优化,欢迎 contributor 参与!

Star 本仓库,然后 Fork 到自己 github,下载代码到本地

# install dependencies
$ npm run install

② 配置后端数据库文件,启动 MongoDB 和 Redis 服务(详情请见上文笔记)

③ 二次开发运行

npm run dev

项目部分技术亮点

1、城市服务组件

城市定位实现原理:

浏览器在发出请求的时候,会有一个 request ,在服务器端可以拿到 requset.ip,然后就可以取数据中心作映射,根据 ip 来定位城市,服务器拿到 city后再下发给浏览器。

原本实现方式: 当页面渲染完了,向服务器发送请求,甚至可以发一个空内容,然后按照上述实现原理来获取 city。即在 mounted 事件之后,向服务器发送请求,然后服务器下发城市名称。(页面发送请求渲染,然后又异步请求获取城市名,共两次请求)

缺点:网络请求浪费,影响用户体验,异步获取的城市会 “闪” 一下。

项目实现方式:当浏览器去请求文档的时候,服务端 ip已经知道了,那个时候就可以拿到对应的城市,立即返回数据给浏览器。做法就是通过 vuex 来同步状态,然后通过 SSR 异步请求就能得到数据。

2、用户数据&状态 浏览器发送一个 request 请求,根据 cookie ,服务器通过 passportredis来验证当前是否是登录状态,返回 username

3、产品详情页开发

本项目产品列表页(如下图所示)

产品详情页(如下图所示) 每一个列表对应着多个 item ,每个 item 与详情页是一对一关系,而上述两个页面路由是没有关联关系的。特此说明:本项目没有 产品库,因此路由没有根据 id来,依旧是根据搜索关键词 keyword。另外,产品列表页和产品详情页之间做了登录拦截

接着,关于产品详情页是如何跳转到购物车的呢?

购物车页面如下图所示,可以看到,页面路由依旧是没有任何关联,但从下图地址栏可见,有一个重要的id属性。因为产品详情页不能与购物车创建一对一映射关系,即在进入产品详情页时,购物车页面是不存在的。当点击购买跳转到购物车时才会创建一个购物车。另外,产品详情页和购物车之间做了登录拦截

4、登录逻辑

  1. 将登录页面用户输入的username和password作为参数,请求接口/users/signin
  2. 对密码加密
self.$axios.post('/users/signin', {
   username : window.encodeURIComponent(self.username),
   password : CryptoJS.MD5(self.password).toString()
})
  1. 请求成功跳转到主页面
 location.href="/" 

5、退出逻辑

退出(exit.vue)组件,采用中间件来实现退出操作。

点击users/components/public/header/user.vue文件中的退出后跳转到退出页(page/exit.vue)之后,自动的去执行退出操作所以利用middleware机制,触发这个获取退出的接口,让接口响应完之后,我们再做自动化的执行动作

6、搜索相关

每输入一个字母都进行一次请求,显然浪费性能,因此引入lodash插件,使用debounce,函数防抖。

import _ from 'lodash'
input:_.debounce(async function(){
      let self=this;
      let city=self.$store.state.geo.position.city.replace('市','')
      self.searchList=[]
      let {status,data:{top}}=await self.$axios.get('/search/top',{
        params:{
          input:self.search,
          city
        }
      })
      self.searchList=top.slice(0,10)
    },300)

参考:由浅入深学习lodash的debounce函数

7、购物车相关

父组件pages/cart.vue通过asyncData获取数据(接口:/cart/getCart) 传给子组件 list.vue 所有订单数据,由子组件全部渲染出来,通过cartData变量联系,如果我在子组件中更改了购买商品的数量,也就是cartData中的值被更改了,那么,我们在父组件监听的total(所有订单总价),也会重新计算

另外,购物车会创建一个订单,创建成功后才会跳转支付页面,但需考虑支付的是哪一个订单,于是支付和订单之间有一个依赖逻辑联系,但是支付和购物车之间是没有任何依赖的,虽然支付的动作是由购物车发起的,但是购物车和支付之间的桥梁是订单

项目成果展示

项目部分截图如下文所示:

排版

笔记内容按照 中文文案排版指北 进行排版。

结尾

欢迎关注微信公众号:小狮子前端Vue

谢谢您的支持!✿✿ヽ(°▽°)ノ✿

注:本仓库不参与商业行为,也请各位读者周知。(This warehouse is not involved in commercial activities.)

转载使用请注明出处,谢谢!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].