实战准备

1.环境准备与项目安装

node 8.12
npm 6.4.1
vue 2.5.17
webpack 4.19
nuxt 2.0.0
1. npm install -g npx
2. npx create-nuxt-app mt-app

辅助工具安装与配置改装

让项目支持es6语法的步骤 第一步要先在package.json中添加--exec babel-node

{"name": "mt-app","version": "1.0.0","description": "My sweet Nuxt.js project","author": "guozhaoxi","private": true,"scripts": {"dev": "cross-env NODE_ENV=development nodemon server/index.js --watch server --exec babel-node","build": "nuxt build","start": "cross-env NODE_ENV=production node server/index.js --exec babel-node","generate": "nuxt generate","lint": "eslint --ext .js,.vue --ignore-path .gitignore .","precommit": "npm run lint"},"dependencies": {"@nuxtjs/axios": "^5.0.0","babel-preset-es2015": "^6.24.1","cross-env": "^5.2.0","element-ui": "^2.4.6","koa": "^2.5.2","nuxt": "^2.0.0"},"devDependencies": {"babel-cli": "^6.26.0","babel-eslint": "^8.2.1","eslint": "^3.18.0","eslint-loader": "^2.0.0","eslint-plugin-vue": "^4.0.0","node-sass": "^4.9.4","nodemon": "^1.11.0","sass-loader": "^7.1.0"}
}

第二步要在根目录下新建一个.babelrc文件。内容如下

{"presets": ["es2015"]
}

在项目下安装babel-cli,bebel-preset-es2015

npm install babel-cli babel-preset-es2015

让项目支持scss语法,安装node-sass,sass-loader

npm install node-sass sass-loader

在nuxt.config.js中引入element-ui的样式。

css: ['element-ui/lib/theme-chalk/reset.css','element-ui/lib/theme-chalk/index.css'
]

——————————————————————————————————————

上次写了一个开头就忘记更新了,真是佩服自己的懒惰精神,这两天又看了看这个项目,觉得知识点还是非常多的,现在继续更新起来当做自己的一个学习笔记,在这里必须要感谢慕课网的快乐动起来老师,正是因为有了老师这样愿意把自己的知识分享出来的人,我们在学习的道路上才少走了许多弯路。

注册&登录

我在学习这门课程的时候老师就说到这门课程里有几个重要的地方需要注意,其中之一就是注册和登录,所以先写它们。从小玩游戏就需要注册账号、登录游戏等操作,真没想到现在的我也可以自己写一个注册、登录的功能。废话不多说,直接上代码

注册

效果演示

先来简单说一下注册页面的逻辑:使用element-ui提供的form表单组件进行快速的构建基础骨架,使用vue中的v-model指令将数据和dom进行双向绑定。当用户填写完用户名和邮箱的时候服务端会向填写的qq邮箱中发送一封带有验证码的邮件,当用户名、邮箱、密码以及验证码都填写完毕后点击下方的注册按钮就可以实现注册功能。

部分代码

<el-formref="ruleForm":model="ruleForm":rules="rules"label-width="100px"class="demo-ruleForm"><el-form-itemlabel="昵称"prop="name"><el-input v-model="ruleForm.name" /></el-form-item><el-form-itemlabel="邮箱"prop="email"><el-input v-model="ruleForm.email" /><el-buttonsize="mini"round@click="sendMsg">发送验证码</el-button><span class="status">{{ statusMsg }}</span></el-form-item><el-form-itemlabel="验证码"prop="code"><el-inputv-model="ruleForm.code"maxlength="4" /></el-form-item><el-form-itemlabel="密码"prop="pwd"><el-inputv-model="ruleForm.pwd"type="password" /></el-form-item><el-form-itemlabel="确认密码"prop="cpwd"><el-inputv-model="ruleForm.cpwd"type="password" /></el-form-item><el-form-item><el-buttontype="primary"@click="register">同意以下协议并注册</el-button><div class="error">{{ error }}</div></el-form-item><el-form-item><aclass="f1"    href="http://www.meituan.com/about/terms"target="_blank">《美团网用户协议》</a></el-form-item></el-form>

逻辑代码部分

<script>
import CryptoJS from "crypto-js";
export default {data() {return {statusMsg: "",error: "",ruleForm: {name: "",code: "",pwd: "",cpwd: "",email: ""},rules: {name: [{required: true,type: "string",message: "请输入昵称",trigger: "blur"}],email: [{required: true,type: "email",message: "请输入邮箱",trigger: "blur"}],pwd: [{required: true,message: "创建密码",trigger: "blur"}],cpwd: [{required: true,message: "确认密码",trigger: "blur"},{validator: (rule, value, callback) => {if (value === "") {callback(new Error("请再次输入密码"));} else if (value !== this.ruleForm.pwd) {callback(new Error("两次输入密码不一致"));} else {callback();}},trigger: "blur"}]}};},layout: "blank",methods: {sendMsg: function() {const self = this;let namePass;let emailPass;if (self.timerid) {return false;}this.$refs["ruleForm"].validateField("name", valid => {namePass = valid;});self.statusMsg = "";if (namePass) {return false;}this.$refs["ruleForm"].validateField("email", valid => {emailPass = valid;});if (!namePass && !emailPass) {self.$axios.post("/users/verify", {username: encodeURIComponent(self.ruleForm.name),email: self.ruleForm.email}).then(({ status, data }) => {if (status === 200 && data && data.code === 0) {let count = 60;self.statusMsg = `验证码已发送,剩余${count--}秒`;self.timerid = setInterval(function() {self.statusMsg = `验证码已发送,剩余${count--}秒`;if (count === 0) {clearInterval(self.timerid);}}, 1000);} else {self.statusMsg = data.msg;}});}},register: function() {let self = this;this.$refs["ruleForm"].validate(valid => {if (valid) {self.$axios.post("/users/signup", {username: window.encodeURIComponent(self.ruleForm.name),password: CryptoJS.MD5(self.ruleForm.pwd).toString(),email: self.ruleForm.email,code: self.ruleForm.code}).then(({ status, data }) => {if (status === 200) {if (data && data.code === 0) {location.href = "/login";} else {self.error = data.msg;}} else {self.error = `服务器出错,错误码:${status}`;}setTimeout(function() {self.error = "";}, 1500);});}});}}
};
</script>

到这里,前端的页面就编写完了,那么后端的接口该如何写呢?

Vue全家桶+SSR+Koa2全栈开发美团网笔记相关推荐

  1. Vue全家桶+SSR+Koa2全栈开发美团网⑧——首页登录注册

    在pages目录下新建register.vue,点击注册按钮就能跳转至http://localhost:3000/register,因为在user.vue中写过 <nuxt-link to=&q ...

  2. Vue全家桶+SSR+Koa2全栈开发美团网⑦——首页开发

    首页header组件开发 pages目录下的index.vue组件页面默认引用layouts目录下的default.vue模板,所以我们在default.vue模板中直接使用element模板 < ...

  3. Vue全家桶+SSR+Koa2全栈开发美团网③——mongoose基础

    先安装mongoDB,启动数据库 然后安装mongoDB可视化数据管理工具Robo 3T 还是在koa2项目下安装mongoose npm i mongoose 在koa2根目录下新建一个dbs文件夹 ...

  4. 【Vue全家桶+SSR+Koa2全栈开发】项目搭建过程 整合 学习目录(持续更新中)

    写在开头 大家好,这里是lionLoveVue,基础知识决定了编程思维,学如逆水行舟,不进则退.金三银四,为了面试也还在慢慢积累知识,Github上面可以直接查看所有前端知识点梳理,github传送门 ...

  5. Vue全家桶+MongoDB+Koa2全栈开发网站

    github网址MT-PC 实战准备 项目安装: npm install -g npx npx create-nuxt-app project-name npm install --update-bi ...

  6. 实战:Vue全家桶+SSR+Koa2实现美团网

    目录 项目演示地址 [高仿美团网](http://mt-app.qkongtao.cn/) 源码下载 [码云](https://gitee.com/KT1205529635/mt-app) 项目介绍 ...

  7. 基于Vue全家桶制作的的高仿美团APP

    美团外卖APP ? 项目演示地址:http://39.108.232.27:9000 ? GitHub:github.com/bxm0927/vue- 基于 Vue 全家桶 (2.x) 制作的美团外卖 ...

  8. C#语言入门、xamarin基础、.NET MAUI全栈开发技术综合笔记

    文章目录 前言: 一.C#语言入门 1.类 类的三大成员 属性(Property) 方法(Method) 事件(Event) 2.静态成员与实例成员 3.类型.变量和方法 3.1类型(Type) 3. ...

  9. 慕课网python就业_python全栈开发慕课网

    前端 web框架: flask:简单.轻量.灵活性大 (官网,stck overflowa); 目录结构:配置,发布,资源,日志,测试... 前后端协作:整体发布,前后端分离发布 django:简单, ...

最新文章

  1. Apache Falcon数据集管理和数据处理平台
  2. .net网络编程之一:Socket编程
  3. GridView 梆定一个实体类
  4. ROS获取KinectV2相机的彩色图和深度图并制作bundlefusion需要的数据集
  5. [react] 状态管理器解决了什么问题?什么时候用状态管理器?
  6. 孕妇能长期在计算机屏幕前工作吗,怀孕了在电脑前工作怎么办
  7. python没有联网_无网环境下的 Python 开发指南
  8. Docker技术入门与实战 第二版-学习笔记-2-镜像构建
  9. bzoj 2648: SJY摆棋子2716: [Violet 3]天使玩偶 --kdtree
  10. RPA目前在中国的发展怎么样?
  11. 《设计原本—计算机科学巨匠Frederick P. Brooks的反思》一一第 3 章 理性模型有哪些缺陷...
  12. 12.学习Camera之——android binder 机制架构
  13. 关于RGB888和RGB565互转代码实现方案推荐
  14. 51单片机温控风扇仿真原理图 C语言程序,51单片机温控风扇仿真原理图+C语言程序与实物制作...
  15. 关于 nth-child(n)的几种写法。
  16. 程序员之路:Gmail邮箱客户端配置
  17. mac go版本升级
  18. 快速把PDF文档里的表格粘贴到excel的方法
  19. Neural Turing Machines-NTM系列(三)ntm-lasagne源码分析
  20. 关于LCD1602单独清除某一行的问题

热门文章

  1. 数据结构课设 宿舍管理系统
  2. native2ascii工具的使用
  3. Qt项目:基与Qt的音乐播放器(本地)
  4. 标准POE供电及网线的8芯作用
  5. python 3D 可视化工具应用 - Open3D (一)
  6. 如何把爱奇艺里下载的视频改为MP4格式
  7. 黑马程序员C++学习笔记<第一阶段_基础篇>
  8. 简单分享七夕情人节的微信小游戏制作步骤
  9. 2016建筑安装工程工期定额 建标【2016】161号
  10. 【5G RRC】小区搜索(Cell Search)和系统捕获(System Acquisition)流程