后端代码 在后端的文件 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实现注册功能的更多相关文章

  1. vue+node+elementUI实现分页功能

    第1===>收集当前页码 和 每页显示条数 第2==>发送ajax请求页码 和 每页显示条数发送给后端 第3===>接收后端返回的数据总条数 total 和 当前页码的数据 data ...

  2. vue+node+mongodb实现的功能

    用vue+node +mongodb实现前后台交互的页面代码,已经上传到github上, 地址是: https://github.com/GainLoss/vue-node-mongodb https ...

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

    0.效果演示 插入视频插不进来,就很烦.可以出门右拐去优酷看下(点我!). 1.准备工作 1.1前端框架 前端使用了基于vue.js的nuxt.js.为什么使用nuxt.js? 首先我做的是博客的项目 ...

  4. vue+node.js+webpack开发微信公众号功能填坑——v -for循环

    页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...

  5. Node.js基础学习四之注册功能

    前言:在Node.js学习(二)和(三)中介绍了如何在Node.js 中获取登录的用户名和密码与数据库进行验证并返回数据给客户端 需求:实现注册功能 为了区分登录和注册是两个不同的请求,在端口后面加上 ...

  6. Node.js实现登录注册功能

    使用Node.js + Navicat for mysql实现的登录注册功能 数据库中存在有”user_id,user_name,password,user_img,user_number“字段,其中 ...

  7. vue+elementUI完成注册及登陆

    1. vue怎么引入和配置使用element-ui框架 1.1 使用vue-cli脚手架工具创建一个vue项目 vue init webpack pro01 1.2 npm安装elementUI cd ...

  8. 一个 Vue + Node + MongoDB 博客系统

    源码 耗时半载(半个月)的大项目终于完成了.这是一个博客系统,使用 Vue 做前端框架,Node + express 做后端,数据库使用的是 MongoDB.实现了用户注册.用户登录.博客管理(文章的 ...

  9. 一步步带你做vue后台管理框架(三)——登录功能

    系列教程<一步步带你做vue后台管理框架>第三课 github地址:vue-framework-wz 线上体验地址:立即体验 <一步步带你做vue后台管理框架>第一课:介绍框架 ...

随机推荐

  1. 安装docker并部署web项目

    一.docker简介 1.docker定义:docker是一个用来装应用的容器,就像杯子可以装水,笔筒可以装笔,书包可以放书一样.你可以把“Hello World!”放到docker中,也可以把网站放 ...

  2. CodeForces - 103B(思维+dfs找环)

    题意 https://vjudge.net/problem/CodeForces-103B 很久很久以前的一天,一位美男子来到海边,海上狂风大作.美男子希望在海中找到美人鱼 ,但是很不幸他只找到了章鱼 ...

  3. 查看Maven版本

  4. 201871010111-刘佳华《面向对象程序设计(java)》第一周学习总结

    <面向对象程序设计(java)>第一周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 ...

  5. AcWing 33. 链表中倒数第k个节点

    习题地址 https://www.acwing.com/solution/acwing/content/2997/ 题目描述输入一个链表,输出该链表中倒数第k个结点. 注意: k >= 0;如果 ...

  6. C#开发BIMFACE系列29 服务端API之获取模型数据14:获取图纸列表

    系列目录     [已更新最新开发文章,点击查看详细] 一个三维模型中可能包含对应多张二维图纸列表,本篇主要介绍如何获取模型文件对应的图纸列表. 请求地址:GET https://api.bimfac ...

  7. swoole client有什么用

    PHP常用socket创建TCP连接,使用CURL创建HTTP连接,为了简化操作,Swoole提供了Client类用于实现客户端功能,并增加了异步非阻塞模式,让用户在客户端也能使用事件循环. 作为客户 ...

  8. workbook数据相关操作

    访问单个单元格 c = ws['A4'] #返回单元格A4,如果单元格不存在,则会自动创建 ws['A4'] = 4 #为单元格A4赋值为4 d = ws.cell(row=4, column=2, ...

  9. springboot-热部署Jrebel

    1. 场景描述 介绍下idea+springboot下的热部署插件-Jrebel,贼好用,以前用过好多种,但是总出现不稳定或者会莫名其妙的没有部署新代码. 2.解决方案 springboot自带的de ...

  10. 实例演示 C# 中 Dictionary<Key, Value> 的检索速度远远大于 hobbyList.Where(c => c.UserId == user.Id)

    前言 我们知道,有时候在一些项目中,为了性能,往往会一次性加载很多条记录来进行循环处理(备注:而非列表呈现).比如:从数据库中加载 10000 个用户,并且每个用户包含了 20  个“爱好”,在 Wi ...