vue+node+elementUI实现注册功能
后端代码 在后端的文件 routes文件夹下的connect.js文件中
// 引入mysql
const mysql = require('mysql'); // 创建连接对象
const connection = mysql.createConnection({
host : 'localhost', // 数据库地址
user : 'root', // 数据库用户名
password : 'root', // 数据库密码
// port: '3306', // 端口号 默认就是3306 可以不写
database: 'supersys' // 数据库的名字
}); // 执行连接方法
connection.connect(() => {
console.log('数据库连接成功!')
}) // 把连接对象暴露出去
module.exports = connection;
在后端account.js文件中
var express = require('express');
var router = express.Router();
// 引入连接数据库模块 路径是相对路径
const connection = require('./connect')
// 解决跨域问题
// 统一设置响应头 解决跨域问题
router.all('*', (req, res, next) => {
// 设置响应头 解决跨域(目前最主流的方式)
res.header('Access-Control-Allow-Origin', '*');
next();
})
/*
this.axios.post('http://127.0.0.1:666/account/accountadd', qs.stringify(params))
accountadd 与前端发送的最末尾的那个是相同的哦 account与后端在app.js分配中的路由是相同的哦
在app.js中分配的路由
// 配置路由10行 var accountRouter = require('./routes/account');
// 配置路由10行 app.use('/account', accountRouter);
*/
router.post('/accountadd', function (req, res, next) {
// res.send("haha"); //测试路由是否是通的
// 接收前端发送的添加账号的数据
let { username, password, usergroup } = req.body;
console.log(username, password, usergroup);
// 构造sql语句 // 把数据存入数据库
const sqlStr = `insert into account(username, password, usergroup) values('${username}', '${password}', '${usergroup}')`;
connection.query(sqlStr,(err,data)=>{
if(err) throw err; //err的有值时,说明有错,此时抛出错误
if (data.affectedRows>0){
res.send({ "error_code":0, "reason": "插入数据成功" });
}else{
// 失败:返回给前端失败的数据对象
res.send({ "error_code":1, "reason": "插入数据失败" });
}
})
});
在后盾app.js中配置
// 配置路由 在第8行下面
var accountRouter = require('./routes/account'); //在第28行下配置
// 配置路由
var accountRouter = require('./routes/account');
在前端accountadd.vue文件中
<template>
<div class="account-add">
<!-- 面板组件 -->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>添加账号</span>
</div>
<div class="text item">
<!-- 添加账号表单 -->
<el-form size="mini" :model="accountAddForm" status-icon :rules="rules" ref="accountAddForm" label-width="100px" class="demo-ruleForm">
<!-- 账号 -->
<el-form-item label="账号" prop="username">
<el-input type="text" v-model="accountAddForm.username" autocomplete="off"></el-input>
</el-form-item>
<!-- 密码 -->
<el-form-item label="密码" prop="password">
<el-input type="text" v-model="accountAddForm.password" autocomplete="off"></el-input>
</el-form-item>
<!-- 确认密码 -->
<el-form-item label="确认密码" prop="checkPwd">
<el-input type="text" v-model="accountAddForm.checkPwd" autocomplete="off"></el-input>
</el-form-item>
<!-- 选中用户组 -->
<el-form-item label="选择用户组" prop="userGroup">
<el-select v-model="accountAddForm.userGroup" placeholder="请选择用户组">
<el-option label="普通用户" value="普通用户"></el-option>
<el-option label="高级管理员" value="高级管理员"></el-option>
</el-select>
</el-form-item>
<!-- 登录按钮&重置按钮 -->
<el-form-item>
<el-button type="primary" @click="submitForm('accountAddForm')">添加</el-button>
<el-button @click="resetForm('accountAddForm')">重置</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
</div> </template> <script>
// 引入qs库
import qs from 'qs'; export default {
data() {
// 自定义密码的验证
const pass = (rule, value, callback) => {
if (value === "") {
callback(new Error("请输入密码"));
} else if (value.length < 3 || value.length > 6) {
callback(new Error("长度在 3 - 6 位"));
} else {
if (this.accountAddForm.checkPwd !== "") {
this.$refs.accountAddForm.validateField("checkPwd");
}
callback();
}
};
// 自定义确认密码的验证
const checkPass = (rule, value, callback) => {
if (value === "") {
callback(new Error("请再次输入密码"));
} else if (value !== this.accountAddForm.password) {
callback(new Error("两次密码不一致"));
} else {
callback();
}
}; return {
// 添加账号表单数据
accountAddForm: {
username: "",
password: "",
checkPwd: "",
userGroup: ""
},
// 验证规则
rules: {
// 账号
username: [
{ required: true, message: "请输入账号", trigger: "blur" },
{ min: 3, max: 6, message: "长度在 3 - 6 位", trigger: "blur" }
],
// 密码
password: [{ required: true, validator: pass, trigger: "blur" }],
// 确认密码
checkPwd: [{ required: true, validator: checkPass, trigger: "blur" }],
// 用户组
userGroup: [
{ required: true, message: '请选择用户组', trigger: 'change' }
]
}
};
},
methods: {
// 点击登录按钮 触发这个函数
submitForm(formName) {
// 获取表单组件 调用验证方法
this.$refs[formName].validate(valid => {
// 如果所有验证通过 valid就是true
if (valid) {
// 收集用户输入的所有账号数据
let params = {
username: this.accountAddForm.username,
password: this.accountAddForm.password,
usergroup: this.accountAddForm.userGroup
}; // 使用axios发送数据给后端
this.axios.post('http://127.0.0.1:666/account/accountadd', qs.stringify(params))
.then(response => {
// 接收后端返回的错误码 和 提示信息 error_code是错误玛 reason是提示的信息
let { error_code, reason } = response.data; // 根据后端响应的数据判断
if (error_code === 0) { // 弹出成功的提示 下面这3行代码时eleUI自带的样似 它表示弹出的是成功的信息哦
this.$message({
type: 'success',
message: reason
}); // 跳转到账号管理列表
this.$router.push('/accountmanage')
} else {
// 弹出失败的提示 这也是eleUI自带的样似哦
this.$message.error(reason);
}
})
.catch(err => {
console.log(err)
})
} else {
// 否则就是false
return false;
}
});
},
// 点击重置按钮 触发这个函数
resetForm(formName) {
// this.$refs.loginForm.resetFields() 获取整个表单组件 调用重置方法
this.$refs[formName].resetFields();
}
}
}
</script> <style lang="less">
.account-add {
.el-card {
.el-card__header {
text-align: left;
font-size: 20px;
font-weight: 600;
background-color: #f1f1f1;
}
.el-card__body {
text-align: left;
.el-form {
width: 290px;
.el-form-item {
margin-bottom: 24px;
}
}
}
}
} // 控制头部的标题部分
.el-main{
line-height: 25px;
}
</style>
最终效果图

vue+node+elementUI实现注册功能的更多相关文章
- vue+node+elementUI实现分页功能
第1===>收集当前页码 和 每页显示条数 第2==>发送ajax请求页码 和 每页显示条数发送给后端 第3===>接收后端返回的数据总条数 total 和 当前页码的数据 data ...
- vue+node+mongodb实现的功能
用vue+node +mongodb实现前后台交互的页面代码,已经上传到github上, 地址是: https://github.com/GainLoss/vue-node-mongodb https ...
- vue koa2 mongodb 从零开始做个人博客(一) 登录注册功能前端部分
0.效果演示 插入视频插不进来,就很烦.可以出门右拐去优酷看下(点我!). 1.准备工作 1.1前端框架 前端使用了基于vue.js的nuxt.js.为什么使用nuxt.js? 首先我做的是博客的项目 ...
- vue+node.js+webpack开发微信公众号功能填坑——v -for循环
页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...
- Node.js基础学习四之注册功能
前言:在Node.js学习(二)和(三)中介绍了如何在Node.js 中获取登录的用户名和密码与数据库进行验证并返回数据给客户端 需求:实现注册功能 为了区分登录和注册是两个不同的请求,在端口后面加上 ...
- Node.js实现登录注册功能
使用Node.js + Navicat for mysql实现的登录注册功能 数据库中存在有”user_id,user_name,password,user_img,user_number“字段,其中 ...
- vue+elementUI完成注册及登陆
1. vue怎么引入和配置使用element-ui框架 1.1 使用vue-cli脚手架工具创建一个vue项目 vue init webpack pro01 1.2 npm安装elementUI cd ...
- 一个 Vue + Node + MongoDB 博客系统
源码 耗时半载(半个月)的大项目终于完成了.这是一个博客系统,使用 Vue 做前端框架,Node + express 做后端,数据库使用的是 MongoDB.实现了用户注册.用户登录.博客管理(文章的 ...
- 一步步带你做vue后台管理框架(三)——登录功能
系列教程<一步步带你做vue后台管理框架>第三课 github地址:vue-framework-wz 线上体验地址:立即体验 <一步步带你做vue后台管理框架>第一课:介绍框架 ...
随机推荐
- 网络编程之tcp协议以及粘包问题
网络编程tcp协议与socket以及单例的补充 一.单例补充 实现单列的几种方式 #方式一:classmethod # class Singleton: # # __instance = None # ...
- 初级模拟电路:3-9 BJT三极管实现逻辑门
回到目录 BJT晶体管可以实现逻辑门,事实上,在场效应管被发明用于集成电路以前,各种逻辑门芯片中的电路就是用BJT晶体管来实现的.最早人们使用二极管与BJT组合来实现逻辑门,这个称为二极管-晶体管逻辑 ...
- 关于JS 的原型和原型链
原型 JavaScript规定,每一个函数都有一个prototype对象属性,指向另一个对象.prototype对象属性的所有属性和方法都会被构造函数的实例继承.这意味着我们可以把那些公用的属性和方法 ...
- LeetCode 5127. 删除被覆盖区间 Remove Covered Intervals
地址 https://www.acwing.com/solution/LeetCode/content/7021/ 目描述给你一个区间列表,请你删除列表中被其他区间所覆盖的区间. 只有当 c < ...
- xpath:
from selenium import webdriverb = webdriver.Firefox()#路径读取方式一:# b.get(r"C:\我的代码\selenium自动化测试\t ...
- redhat 安装 oracle中途遇到的问题(1)
(1)安装到68%时出现弹出框 Error in invoking target 'install' of makefile '/home/oracle/app/oracle/product/11.2 ...
- activiti5初识
因工作需要,接手新的项目,其中用到了activiti实现的工作流,特意去大致学习下,特此记录下. 1.acticiti5框架说明及表结构介绍 Activiti5工作流引擎框架: 它实际上是一个java ...
- 13-scrapy中selenium的应用
一. 引入 在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值.但是通过观察我们 ...
- [IDA] 将变量索引进行计算
按 k 键 [ebp+var+arg_0] - > [ebp+value]
- java高并发系列 - 第3天:有关并行的两个重要定律
有关为什么要使用并行程序的问题前面已经进行了简单的探讨.总的来说,最重要的应该是处于两个目的. 第一,为了获得更好的性能: 第二,由于业务模型的需要,确实需要多个执行实体. 在这里,我将更加关注第一种 ...