为了更进一步清晰地了解前台数据向后台提交的过程,更好地加强巩固前端开发学习,整理了基础的【前后台用户登录注册功能】实现代码。后台通过node.js开发,数据存储在sqlite中,前台vue+element完成开发,首先功能实现效果展示如下:

一、后台node.js

安装express、body-parser 【npm install express body-parser 】,关于express介绍,见https://blog.csdn.net/maidu_xbd/article/details/86632618  body-parser用于处理post请求

全局安装sqlite3【npm install sqlite3 -g】sqlite使用说明详细见https://blog.csdn.net/maidu_xbd/article/details/99977786

server.js完整代码:

const express = require("express")
const bodyParser = require("body-parser")const sqlite3 = require("sqlite3").verbose()
const app = express()
// sqlites数据库地址
let sqliteDbPath = "C:\\Users\\lenovo\\Desktop\\Demo.db"
// 打开sqlites数据库
var db = new sqlite3.Database(sqliteDbPath)
app.use(bodyParser.json()) // for parsing application/json
// app.get('/', (req, res) => res.send('Hello World!'))// 登录请求处理
app.post("/submitLogin", function(req, res) {var username = req.body.namevar password = req.body.passworddb.all(`select * from user where username=?`, username, function(err, row) {if (err) throw errelse {// console.log(row)if (row == "") {// 如果查找数据库用户名为空,则无此用户res.send({ status: 500, msg: "此用户不存在" })} else {// console.log(row[0].password)if (row[0].password != password) {// 检验密码是否一致res.send({ status: 500, msg: "密码错误" })} else {res.send({ status: 200, msg: "登录成功" })}}}})
})// 注册请求处理
app.post("/submitRegister", (req, res) => {var username = req.body.namevar email = req.body.emailvar password = req.body.passwordconsole.log(username)db.all("select * from user where username=?", username, function(err, row) {if (err) throw errelse {// console.log(row)if (row == "") {// 如果查找数据库用户名为空,则无此用户,在数据库中存储用户名,密码和邮箱信息// var sql_add = db.prepare(`insert into user (username, password, email) values('buding1', '1111', '221@sdsd.com')`)var sql_add = db.prepare(`insert into user (username, password, email) values(?,?,?)`)sql_add.run(username, password, email)res.send({ status: 200, msg: "恭喜你,注册成功!" })} else {res.send({ status: 500, msg: "用户名已注册,请更换用户名" })}}})
})app.listen(9999, () => console.log("Example app listening on port 9999!"))

注意:接口文件 

  1. 用户登录验证

前台将用户输入的用户名和密码传入到后台验证

url

/submitLogin

method

POST

request

{“name”:userName,”password”:password}

response

后台验证成功:{“status”:200,”msg”:”登录成功”}

后台密码验证失败:{“status”:500,”msg”:”密码错误”}

后台用户不存在验证失败:{“status”:500,”msg”:”此用户不存在”}

2. 用户注册验证

前台将用户输入的用户名、邮箱和密码传入到后台验证

url

/submitRegister

method

POST

request

{“name”:userName, "email":email, ”password”:password}

response

后台验证成功:{“status”:200,”msg”:”恭喜你,注册成功”}

后台验证失败:{“status”:500,”msg”:”用户名已注册,请更换用户名”}

二、前台vue+element

安装element-ui 【npm i element-ui -S】

安装axios:【npm install axios --save-dev】

详细见https://blog.csdn.net/maidu_xbd/article/details/88566665

Login.vue完整代码如下:

<template><div class="login-demo"><div class="login-wrap"><el-row type="flex" justify="center"><!-- 登录框 --><el-form ref="loginForm" :rules="formRules" :model="user" status-icon label-width="70px"><el-tabs :stretch="true" v-model="activeName" @tab-click="handleClick"><el-tab-pane label="登录" name="login"><el-form-item prop="username" label="用户名"><el-input v-model="user.username" placeholder="请输入用户名"></el-input></el-form-item><el-form-item prop="password" label="密码"><el-input v-model="user.password" show-password placeholder="请输入密码"><template slot="prepend"></template></el-input></el-form-item><el-checkbox id="savePassword" checked="checked" @click="savePassword()">记住密码</el-checkbox><router-link to="/forgetPassword">忘记密码</router-link><br><br><el-form-item><el-button type="primary" @click="doLogin('loginForm')">登 录</el-button></el-form-item></el-tab-pane><!-- 注册框 --><el-tab-pane label="注册" name="register"><el-form-item prop="username" label="用户名"><el-input v-model="user.username" placeholder="请输入用户名"></el-input></el-form-item><el-form-item prop="email" label="邮箱"><el-input v-model="user.email" placeholder="请输入邮箱"></el-input></el-form-item><el-form-item prop="password" label="设置密码"><el-input v-model="user.password" show-password placeholder="请输入密码"></el-input></el-form-item><el-form-item><el-button type="primary" icon @click="doRegister('loginForm')">注册账号</el-button></el-form-item></el-tab-pane></el-tabs></el-form></el-row></div></div>
</template>
<script>
import axios from "axios";
export default {name: "login",data() {return {activeName: "login",checked: false,user: {username: "",password: ""},// 通过 formRules 属性传入约定的验证规则formRules: {username: [{ required: true, message: "用户名不能为空", trigger: "blur" }],password: [{ required: true, message: "密码不能为空", trigger: "blur" },{ type: "string", min: 6, message: "密码不能小于6位", trigger: "blur" }],// bug--由于此处登录和注册共用一个el-form,因此只能绑定一个rules,如果邮箱设置为必填,将导致无法登陆。一般情况下,将登录和注册分别放在不同的el-form中,为它们设置不同的rulesemail: [// { required: true, message: "请输入邮箱地址", trigger: "blur"  },{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }]}}},created() {},methods: {// 登录doLogin(form) {this.$refs[form].validate((valid) => {if (valid) {axios.post("/submitLogin/", {// .post("/api/login/", {name: this.user.username,password: this.user.password}).then(res => {//  console.log("输出response.data", res.data);if (res.data.status === 200) {this.$router.push({ path: "/welcome" });} else {this.$message.error(res.data.msg)}});} else {return false;}});},// 注册账号doRegister(form) {this.$refs[form].validate((valid) => {if (valid) {console.log(valid);axios.post("/submitRegister/", {name: this.user.username,email: this.user.email,password: this.user.password}).then(res => {// console.log("输出response.data", res.data);if (res.data.status === 200) {this.$message.success(res.data.msg)this.activeName = "login";} else {this.$message.error(res.data.msg);}});} else {return false;}});},handleClick(tab, event) {console.log(tab, event);},// 记住密码savePassword() {if (document.getElementById("savePassword").checked) {var username = this.user.username;var password = this.user.password;window.sessionStorage.username = username;window.sessionStorage.password = password;localStorage.rmbPassword = true;} else {localStorage.rmbPassword = false;}}}
}</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
/* 公共样式 */
li {list-style: none;float: left;
}.login-demo {position: fixed;width: 100%;height: 100%;background: url("../assets/images/bg2.png") no-repeat;background-size: cover;top: 0px;left: 0px;overflow: hidden;
}.login-wrap {background: url("../assets/images/login_bg.png") no-repeat;width: 400px;height: 310px;margin: 175px auto;margin-left: 272px;border-radius: 6px;line-height: 20px;padding-top: 0px;
}.el-tabs>>>.el-tabs__item {font-size: 18px;margin: 5px auto;
}.el-tabs__nav {font-size: 18px;
}a {text-decoration: none;color: #606266;font-size: 14px;float: right;
}a:hover {color: coral;
}.el-checkbox {text-indent: 4px;
}>>>.el-form-item__label {padding: 0px 4px 0 0;
}>>>.el-checkbox__label {padding-left: 0px;
}.el-button {width: 118%;margin-left: -40px;background-color:#16696a;letter-spacing: 5px;border: 0px;
}</style>

ForgetPassword.vue完整代码如下:
备注:发送邮件尚未做

<template><div class="forget-password"><div id="content"><h3>{{message}}</h3><el-form :rules="rules" label-width="40px" class="demo-ruleForm"><el-form-item label="邮箱" prop="pass"><el-input type="input" v-model="email" autocomplete="off"></el-input></el-form-item><el-form-item><el-button type="primary" @click="sumbitForm">确定</el-button><el-button type="primary" @click="cancle">取消</el-button></el-form-item></el-form></div></div>
</template>
<script>
import axios from "axios";
export default {name: "forget-password",data() {return {message: "找回密码!",email: "",rules: {email: [{ message: "邮箱不能为空", trigger: "blur" }]}};},methods: {sumbitForm() {if (!this.email) {this.$message.error("请输入邮箱!");return;} else {var reg = /^(?:\w+\.?)*\w+@(?:\w+\.)*\w+$/;if (!reg.test(this.email)) {this.$message.error("邮箱格式不正确,请重新输入!");this.email.focus();return false;} else {this.$message("发送邮件");//    axios//     .post("/register/", {//       name: this.user.username,//       email: this.user.email,//       password: this.user.password//     })//     .then(res => {//       // console.log("111输出response.data", res.data);//       // console.log("111输出response.data.status", res.data.status);//       if (res.data.status === 200) {//         this.$router.push({ path: "/" });//       } else {//         alert("您输入的用户名已存在!");//       }//     });}}},cancle() {this.$router.go(-1);}}
};</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.forget-password {position: fixed;width: 100%;height: 100%;background: url("../assets/images/bg4.png") no-repeat;background-size: cover;top: 0px;left: 0px;overflow: hidden;
}#content {width: 400px;height: 200px;margin: 100px auto;/* background: #d7e695; */background-color: rgba(0, 0, 0, 0.2);padding: 10px;border-radius: 6px;
}</style>

注意:【config】下【index.js】修改配置文件

proxyTable: {'/': {target: 'http://localhost:9999',changeOrigin: true,pathRewrite: {'^/': ''}}},

vue+node---使用element框架实现的前后台用户登录注册功能相关推荐

  1. java实现用户登录注册功能(用集合框架来实现)

    需求:实现用户登录注册功能(用集合框架来实现) 分析: A:需求的类和接口 1.用户类 UserBean 2.用户操作方法接口和实现类 UserDao UserDaoImpl 3.测试类 UserTe ...

  2. MVC框架实现用户登录注册功能(连接数据库)

    目录 一.简单理解MVC框架 二.项目结构 三.项目源码 3.1 User 3.2 UserDao 3.3 RegisterDao 3.4 servletControll 3.5 servletCon ...

  3. node mysql登录注册_图解NodeJS实现登录注册功能

    该Demo根据菜鸟教程的练手项目,请提前到菜鸟教程的官网查看nodejs的相关教程,根据教程实际操作一遍,然后自己动手去实现登录.注册功能,此Demo只作参考,不符合前端相关规范. 使用的技术栈 no ...

  4. Vue + Spring Boot 学习笔记01:实现用户登录功能

    Vue + Spring Boot 学习笔记01:实现用户登录功能 一.创建后端Spring Boot项目Book Management 二.创建前端Vue项目bm-vue 三.修改后端项目Book ...

  5. mysql flask-login_Flask框架通过Flask_login实现用户登录功能示例

    本文实例讲述了Flask框架通过Flask_login实现用户登录功能.分享给大家供大家参考,具体如下: 通过Flask_Login实现用户验证登录,并通过login_required装饰器来判断用户 ...

  6. MVC框架实现用户的登录注册功能

    MVC是什么? MVC,全称model view controller-模型,视图,控制器 model是将数据库中的表到Java中变成实体类 view是编写JSP页面 controller是用来业务逻 ...

  7. Vue项目二 登录注册功能的实现

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.系统注册功能的实现 1.配置注册页面路由 2.注册页面的搭建 3.api下发送ajax请求的文件创建 二.后台数据 ...

  8. [golang gin框架] 29.Gin 商城项目-用户登录,注册操作

    一.用户登录,注册界面展示说明 先看登录,注册界面以及相关流程,再根据流程写代码,一般网站的登录,注册功能都会在一个页面进行操作,还有的是在几个页面进行操作,这里讲解在几个页面进行注册的操作,步骤如下 ...

  9. vue+node前后端实现登录注册功能

    使用vue cli3脚手架搭建一个vue项目 创建一个vue_cms项目,没安装脚手架全局安装即可,安装过程选择默认的即可 vue create vue_cms 安装路由,axios,完成后启动项目, ...

最新文章

  1. SNMP协议5种报文
  2. kotlin集合操作符——生产操作符
  3. SAP Marketing Cloud功能简述(四) : 线索和客户管理
  4. Redux有何优点?
  5. php课程 4-15 数组遍历、超全局数组、表单提交数据(多看学习视频)
  6. Node.js的基本使用3
  7. 有感于中国的系统分析员考试
  8. iOS 代码命名规范 及Android 代码命名规范(1)iOS
  9. Java 类和Static关键字
  10. 容器技术Docker K8s 9 容器服务ACK应用场景
  11. envi与arcgis文件转换_ArcGIS ENVI中土地分类格式互转、土地利用转移矩阵、变化图谱计算详解...
  12. 有道翻译API接口的服务开通与使用Python进行接口调用实例演示,有道智云·AI开放平台
  13. 用ultraiso安装linux系统教程,使用UltraISO制作ubuntu安装u盘启动盘图文教程
  14. 探索式测试之隐喻(种植)
  15. fabric.js学习
  16. AcWing 1145. 北极通讯网络 题解
  17. Ansys随机振动理论
  18. 易基因|一种全新的检测DNA羟甲基化的技术:ACE-Seq
  19. mysql函数索引_MySQL 函数索引 (Functional indexes)
  20. TensorFlow北大公开课学习笔记-4.2学习率

热门文章

  1. 公交实时位置查询APP
  2. AE10.0 for VB破解
  3. java 使用腾讯云文字识别,识别驾驶证
  4. python求均值及extend用法
  5. 计算机新教师汇报课报道,新教师汇报课活动报道.pdf
  6. 第七章-单表数据记录查询
  7. 夜光遥感(一):夜光遥感数据的介绍和获取
  8. 分析说明多媒体在计算机网络上的应用,多媒体技术在计算机网络中应用探讨.doc...
  9. Delta机器人运动学算法编译中遇到的问题
  10. java gridlayout宽度_java-ee – 无法使gridlayout适应屏幕大小(Vaadin 6.7.4)