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

实战准备

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-form
        ref="ruleForm"
        :model="ruleForm"
        :rules="rules"
        label-width="100px"
        class="demo-ruleForm">
        <el-form-item
          label="昵称"
          prop="name">
          <el-input v-model="ruleForm.name" />
        </el-form-item>
        <el-form-item
          label="邮箱"
          prop="email">
          <el-input v-model="ruleForm.email" />
          <el-button
            size="mini"
            round
            @click="sendMsg">发送验证码</el-button>
          <span class="status">{{ statusMsg }}</span>
        </el-form-item>
        <el-form-item
          label="验证码"
          prop="code">
          <el-input
            v-model="ruleForm.code"
            maxlength="4" />
        </el-form-item>
        <el-form-item
          label="密码"
          prop="pwd">
          <el-input
            v-model="ruleForm.pwd"
            type="password" />
        </el-form-item>
        <el-form-item
          label="确认密码"
          prop="cpwd">
          <el-input
            v-model="ruleForm.cpwd"
            type="password" />
        </el-form-item>
        <el-form-item>
          <el-button
            type="primary"
            @click="register">同意以下协议并注册</el-button>
          <div class="error">{{ error }}</div>
        </el-form-item>
        <el-form-item>
          <a
            class="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>

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

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
Spring Boot、Vue 和 Spring Cloud 是一套能够完整实现全栈开发的工具组合。 首先,Spring Boot 是一个用于快速构建Java应用程序的框架。它使用注解和自动配置来简化项目的配置和部署,并提供了一系列功能强大的开箱即用的特性,例如集成了数据库访问、Web开发和安全认证等。同时,Spring Boot 还兼容Spring框架,并且可以轻松与其他Spring组件集成,如Spring MVC 和Spring Security 等。 其次,Vue 是一个流行的JavaScript框架,用于构建可交互的用户界面。它提供了一个响应式的MVVM(Model-View-ViewModel)架构,使开发者能够快速构建单页面应用(SPA)和复杂的前端交互。Vue 有一套强大的工具和插件,使得开发者能够轻松地管理应用状态、路由导航、组件复用等。 最后,Spring Cloud 是一个用于构建分布式微服务架构的框架。它提供了一系列的功能组件,如服务发现、负载均衡、断路器和分布式配置等,可以帮助开发者更容易地构建和管理分布式系统。Spring Cloud 与Spring Boot 很好地集成在一起,能够提供全自动化的部署和扩展机制,以及强大的监控和管理能力。 综上所述,使用Spring Boot、Vue 和 Spring Cloud 的组合,我们可以实现一个完整的全栈开发解决方案。Spring Boot 提供了快速构建Java后端的能力,Vue 提供了强大的前端交互界面,而Spring Cloud 则提供了强大的分布式系统架构支持。通过这样的组合,我们可以更高效地开发出功能完备、响应迅速的全栈应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值