0.效果演示

插入视频插不进来,就很烦。可以出门右拐去优酷看下(点我!)。

1.准备工作

1.1前端框架

前端使用了基于vue.js的nuxt.js。为什么使用nuxt.js

首先我做的是博客的项目,所以SSR至关重要。虽然跟本文要讲的登录注册没有什么关系,但是文章如果用axios来异步获取的话,那么搜索引擎是抓不到任何数据的。用nuxt.js可以说是为了整个项目考虑。

第二点就是省事,Nuxt.js的项目条理非常清晰,有非常方便的路由和模板功能,而且方便前端和服务端进行沟通。而且自动支持es67的语法,自带nodemon功能之类的不再赘述。感兴趣的可以自行百度。

1.2后端框架

用了koa2,如果使用Nuxt.js的话可以直接将后段项目放在server目录。使用koa2大势所趋,不多解释,都0202年了,所以不存在插件比express少的问题。

1.3数据库

数据库用的是mongodb和redis,为什么一起用,因为redis更适合做一些缓存类的工作,而且操作便捷,适合储存验证码或者session等临时数据。mongodb适合做数据库,有聚合管道和多级联合之类的骚操作,能够和mysql等关系型数据库媲美。但是因为我是前端嘛,mongoose的写法更舒服点,所以就选用了mongodb。

1.4ui框架

用了element-ui,为什么用element-ui,因为大家都在用嘛,跟风。

2.项目搭建

多说无益,感兴趣可以直接进nuxt.js的官网。

首先安装npx,然后用 create-nuxt-app 来创建项目,命令行如下。

$ npx create-nuxt-app project-name

然后按照提示就可以进入项目了,其中有几个小坑,提几嘴。

  • 历史原因,后端默认是不支持es6import语法的,所以要配置babel,方法如下

    • 安装插件  npm i babel-preset-es2015
    • 在项目目录里新建 .babelrc 文件,然后在里面输入内容 { "presets": ["es2015"] } 并保存。
    • 最后在 package.json 里的 "scripts" 里的 dev  start 末尾添加 --exec babel-node 并保存。如下
    •   "scripts": {
      "dev": "cross-env NODE_ENV=development nodemon server/index.js --watch serve --exec babel-node",
      "build": "nuxt build",
      "start": "cross-env NODE_ENV=production node server/index.js --exec babel-node",
      "generate": "nuxt generate"
      },

3.项目搭建

3.1项目目录介绍

首先来观察下nuxt.js的目录,可以大体看出来我们要怎么写这个项目。

挨个解释一下

  • assets顾名思义,放未编译的静态资源的地方。
  • components放组件的
  • layouts模板里面可以放指定的模板,就是相当于相框的意思
  • middleware中间件。
  • node_modules放依赖的地方
  • pages就是页面,nuxt.js给你配置好了,在里面新建一个1.vue 就相当于配置了一个“/1”的路由。
  • plugins放插件的地方,插件可以在里面提前配置好,然后导出。
  • server就是后端的文件夹,里面有些复杂,等待会儿展开说。
  • static静态文件的地方
  • store放vuex模型的地方

详细请看文档(点我!

3.2 前端搭建

前端重点不是特别多,唯一有点复杂的就是表单校验,但是好在element-ui已经给做好了。

但还是从头简要的说一遍,首先就是新建模板,模板就是套在外面的相框

如图,绿色框中就相当于模板,然后活动部分就相当于page内容,page就好像vue-cli里中的vue-router内容,事实也确实是这样,只不过nuxt.js换了个说法。

 <template>
<div class="body1">
<div class="container animated slideInDown">
<header>
<Myheader :location="this.location" />
</header>
<main class="main">
<nuxt />
</main>
<footer>
<Myfooter />
</footer>
</div>
</div>
</template>
 <script>
import Myheader from "../components/public/header";
import Myfooter from "../components/public/footer";
export default {
components: {
Myheader,
Myfooter
},
data: () => {
return {
location: ""
};
},
mounted() {
this.location = window.location.href.split("/").pop();
}
};
</script>

这的location属性是为了判断模板顶上的登录注册字样是否要在登录页面注册页面出现。不过这都不是重点,重点是本文要讲的登录注册功能,所以理所当然这里就是随便讲一下。不做过多的描述。

3.2.1注册页面搭建

不多废话,直接看代码,代码位置 @/pages/register.js

<template>
<div class="login_container">
<!-- 首先element表单的外标签。标签里的属性可以参考element-ui文档的Form表单 -->
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
class="ruleForm"
label-width="100px"
size="small"
>
<!-- 其中表单项用el-form-item标签包起来,证明这是一个表单项目 -->
<el-form-item label="用户名" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="ruleForm.password"></el-input>
</el-form-item>
<el-form-item label="确认密码" prop="password2">
<el-input v-model="ruleForm.password2"></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="ruleForm.email"></el-input>
<el-button
@click="sendMsg"
class="sendemail"
:disabled="ruleForm.verifyflag"
>{{ ruleForm.verifymsg }}</el-button>
</el-form-item> <el-form-item label="验证码" prop="code">
<el-input v-model="ruleForm.code"></el-input>
</el-form-item>
<el-form-item>
<el-button @click="submitForm('ruleForm')">注册</el-button>
<!-- <el-button @click="resetForm('ruleForm')"></el-button> -->
</el-form-item>
</el-form>
</div>
</template>

接着放代码,是用来接收表单信息的 ruleForm 对象

      ruleForm: {
name: "",
password: "",
password2: "",
email: "",
code: "",
verifymsg: "发送验证码", // 要设置成动态的data,而不是直接填写在按钮里是因为data需要变化,直接操作data方便一点。
verifyflag: false // 测试现在按钮是否可以点击,因为60秒之内不能重复发验证码
},

表单现在校验不需要直接操作dom节点或者验证ruleForm里的数据。因为element-ui提供了校验的方法。控制着校验方法的就是其中表单的属性 :rules="rules" 的rules对象。

老样子直接放代码:

   rules: {
name: [{ required: true, message: "请输入用户名", trigger: "blur" }],
password: [{ required: true, message: "请输入密码", trigger: "blur" }],
password2: [
{
required: true, message: "请确认您的密码",
trigger: "blur"
},
{
validator: (rule, value, callback) => {
if (value === "") {
callback(new Error("请再次输入密码"));
} else if (value !== this.ruleForm.password) {
callback(new Error("两次输入密码不一致"));
} else {
callback();
}
},
trigger: "blur"
}
],
email: [
{
required: true,
type: "email",
message: "请正确输入您的邮箱",
trigger: "blur"
}
],
code: [
{
required: true,
message: "请正确输入您的验证码",
trigger: "blur"
}
]
}

简单讲解一下,rules的每个属性都是一个数组,里面放着对象,就是校验这个表单同名属性的方法。比较简单的就类似校验name属性,只需要判断他是否是必填的,如果每天就提示message的信息。

复杂一点的就像password2一样,在校验数组里有第二个对象,添加一个validator方法就行了。后面的参数和更详细的用法欢迎看文档(点我!

就这样现在这个表单已经可以做前端的校验了。添加方法等后端完成(下篇博客)以后再说。

同理我们新建 @/pages/login.vue 时,同样自动创建好了login的路由,我们只需要专注代码即可。

 <template>
<div class="login_container">
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
class="ruleForm"
label-width="100px"
size="small"
>
<el-form-item label="用户名" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="ruleForm.password" show-password></el-input>
</el-form-item>
<el-form-item>
<el-button @click="submitForm('ruleForm')">登录</el-button>
<el-button @click="resetForm('ruleForm')">注册</el-button>
</el-form-item>
</el-form>
</div>
</template> <script>

同理上script代码

  data() {
return {
ruleForm: {
name: "",
password: ""
},
rules: {
name: [{ required: true, message: "请输入用户名", trigger: "blur" }],
password: [{ required: true, message: "请输入密码", trigger: "blur" }]
}
};

ok,前端大体就是这样,还是比较简单的。

但是css问题暂时没有写,毕竟自己不是做ui的,简洁大方就行了,功能性足够就好。

vue koa2 mongodb 从零开始做个人博客(一) 登录注册功能前端部分的更多相关文章

  1. vue koa2 mongodb 从零开始做个人博客(二) 登录注册功能后端部分

    0.效果演示 插入视频插不进来,就很烦.可以出门右拐去优酷看下(点我!). 1.后端搭建 1.1项目结构 首先看一下后端的server目录 挨个解释一下 首先dbs文件夹顾名思义,操作数据库的,mod ...

  2. 一个基于Vue.js+Mongodb+Node.js的博客内容管理系统

    这个项目最初其实是fork别人的项目.当初想接触下mongodb数据库,找个例子学习下,后来改着改着就面目全非了.后台和数据库重构,前端增加了登录注册功能,仅保留了博客设置页面,但是也优化了. 一.功 ...

  3. vue+node+mongodb前后端分离博客系统

    感悟 历时两个多月,终于利用工作之余完成了这个项目的1.0版本,为什么要写这个项目?其实基于vuejs+nodejs构建的开源博客系统有很多,但是大多数不支持服务端渲染,也不支持动态标题,只是做到了前 ...

  4. Flask博客类登录注册验证模块代码(十四)

    1 文件系统 blog #博客类 App forms #表单 __init__.py user.py models #模型 __init__.py user.py static #静态文件 templ ...

  5. NodeJS+Mongodb+Express做CMS博客系统

    楼主正在用业余时间开发中-- ,目前的版本仅支持会员系统,尝鲜一下吧~ hi-blog 一个 nodejs+express+mongodb 的 cms 系统 怎么启动 默认你已经安装了 mongodb ...

  6. 基于 Hexo 从零开始搭建个人博客(二)

    阅读本篇前,请先配置好相应的环境,请仔细阅读教程 基于 Hexo 从零开始搭建个人博客(一). 原文链接:基于 Hexo 从零开始搭建个人博客(二) 前言 博客搭建过程遇到任何问题,优先在本页面搜索, ...

  7. 从零开始,搭建博客系统MVC5+EF6搭建框架(4)下,前后台布局实现、发布博客以及展示。

    一.博客系统进度回顾 目前已经完成了,前台展示,以及后台发布的功能,最近都在做这个,其实我在国庆的时候就可以弄完的,但是每天自己弄,突然最后国庆2天,连电脑都不想碰,所以就一直拖着,上一篇写了前端实现 ...

  8. 基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统

    很久没更新博客,最近也有点忙,然后业余时间搞了一个比较完整基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统的流程系统,希望对 ...

  9. nodejs实战《一起学 Node.js》 使用 Express + MongoDB 搭建多人博客

    GitHub: https://github.com/nswbmw/N-blog N-blog 使用 Express + MongoDB 搭建多人博客 开发环境 Node.js: 6.9.1 Mong ...

随机推荐

  1. 使用Python批量更新服务器文件【新手必学】

    买了个Linux服务器,Centos系统,装了个宝塔搭建了10个网站,比如有时候要在某个文件上加点代码,就要依次去10个文件改动,虽然宝塔是可视化页面操作,不需要用命令,但是也麻烦,虽然还有git的h ...

  2. C# 多线程的阻塞和继续-ManaulResetEvent的使用

    在工作中,会遇到需要多线程处理相应的业务需求,最典型的包括Socket的通信. 多线程处理里,就会考虑到,哪个线程先运行,哪个线程后运行的情况. 这里我介绍一下,使用ManualResetEvent类 ...

  3. jQuery的核心功能选择器

    选择器是jquery的核心 jquery选择器返回的对象是jquery对象,不会返回undefined或者null,因此不必进行判断 基本选择器: ID选择器  $("#ID") ...

  4. B样条曲线方程和C++实现

    功能:根据参数u值和k(大小为阶数值)与节点矢量,计算第i个k次B样条基数 输入参数: u—参数值:k—大小值为阶数:i—第i个k次B样条的支撑区间左端节点的下标:aNode为节点向量. 输出参数:返 ...

  5. 电信IOT平台固件升级

    1 离线签名 注意事项:特别重要,被坑了好久 A  将差分文件.bin格式的压缩成.zip 再进行签名    B  不能再中文目录下 否则,会出现校验失败 记住私钥 2 上传公钥 3 上传固件包 4 ...

  6. linux系统下apache服务的启动、停止、重启命令

    本文章简单的介绍了关于linux下在利用命令来操作apache的基本操作如启动.停止.重启等操作,对入门者不错的选择.本文假设你的apahce安装目录为 usr local apache2,这些方法适 ...

  7. 展讯平台uboot启动流程

    启动流程 1. Stage1 start.S代码结构 u-boot的stage1代码通常放在start.S文件中,用汇编语言,主要实现功能如下:  (1) 定义入口: 该工作通过修改连接器脚本来完成. ...

  8. 解决mysql导入导出错误问题

    1.datetime类型: 当datetime的值为0000-00-00:00:00:00时,mysql是不接受此条数据的,当然可以 insert ignore into table--------- ...

  9. STL专题

    一.algorithm 1.sort 问题1:给你n个整数,请按从大到小的顺序输出其中前m大的数. Input:每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二 ...

  10. Python小白

      .IDLE软件为内建于CPython的集成开发环境(IDE),包括编辑器,编译或解释器,调试器       .py(后缀保存) 2.行一,单行注释     多行,”””    ‘’’  之后,内建 ...