当前位置:   article > 正文

Vue项目 成员管理系统 系统注册模块(3)_./src/components/flowdesign/components/nodelayout.

./src/components/flowdesign/components/nodelayout.vue?vue&type=template&id=0

一、系统注册

1.1 路由配置

1.1.1 在 src\router\index.js 中配置路由(把原有的路由配置删除),并添加对index.vue的引入,如下:

  1. import Vue from "vue";
  2. import VueRouter from "vue-router";
  3. import Register from "../views/register";
  4. Vue.use(VueRouter);
  5. const routes = [//在路由里进行注册
  6. {
  7. path: '/register',
  8. name: 'Register',
  9. component: Register,//引入的组件
  10. }
  11. ];
  12. const router = new VueRouter({
  13. mode: "history",
  14. base: process.env.BASE_URL,
  15. routes,
  16. });
  17. export default router;

通过 import Register from './views/register' 导入组件(引入就是引到文件夹的名),当前只指定了组件路径,默认导入的就是指定路径下的 index.vue 组件 

1.2 注册页面

1.2.1 在 src\views 目录下新建 register目录及此目录下新建文件 index.vue

在element-ui中获取需要的表单,表单部分代码:

首先在template标签里写页面的相应组件,表单使用element-ui官网里的例子。

  1. <template>
  2. <div>
  3. <el-form
  4. :model="form"
  5. status-icon
  6. :rules="rules"
  7. ref="form"
  8. label-width="100px"
  9. class="demo-form"
  10. >
  11. <el-form-item
  12. label="账号"
  13. prop="username"
  14. >
  15. <el-input v-model="form.username"></el-input>
  16. </el-form-item>
  17. <el-form-item
  18. label="昵称"
  19. prop="nickname"
  20. >
  21. <el-input v-model="form.nickname"></el-input>
  22. </el-form-item>
  23. <el-form-item
  24. label="密码"
  25. prop="password"
  26. >
  27. <el-input
  28. type="password"
  29. v-model="form.password"
  30. autocomplete="off"
  31. ></el-input>
  32. </el-form-item>
  33. <el-form-item
  34. label="确认密码"
  35. prop="checkPass"
  36. >
  37. <el-input
  38. type="password"
  39. v-model="form.checkPass"
  40. autocomplete="off"
  41. ></el-input>
  42. </el-form-item>
  43. <el-form-item>
  44. <el-button
  45. type="primary"
  46. @click="submitForm('form')"
  47. >提交</el-button>
  48. <el-button @click="resetForm('form')">重置</el-button>
  49. </el-form-item>
  50. </el-form>
  51. </div>
  52. </template>

表单规则代码如下:

  1. <script>
  2. export default {
  3. data() {
  4. var validatePass = (rule, value, callback) => {
  5. if (value === '') {
  6. callback(new Error('请输入密码'));
  7. } else {
  8. if (this.form.checkPass !== '') {
  9. this.$refs.form.validateField('checkPass');
  10. }
  11. callback();
  12. }
  13. };
  14. var validatePass2 = (rule, value, callback) => {
  15. if (value === '') {
  16. callback(new Error('请再次输入密码'));
  17. } else if (value !== this.form.password) {
  18. callback(new Error('两次输入密码不一致!'));
  19. } else {
  20. callback();
  21. }
  22. };
  23. return {
  24. form: {
  25. username: '',
  26. nickname: '',
  27. password: '',
  28. checkPass: '',
  29. },
  30. rules: {//判断规则
  31. username: [{ required: 'true', message: '账号不能为空', trigger: 'blur'
  32. }],//required:这一项是必需的
  33. nickname: [{ required: 'true', message: '昵称不能为空', trigger: 'blur'
  34. }],
  35. password: [
  36. { validator: validatePass, trigger: 'blur' }//触发条件:失焦
  37. ],
  38. checkPass: [
  39. { validator: validatePass2, trigger: 'blur' }
  40. ],
  41. }
  42. }
  43. },
  44. components: {},
  45. methods: {
  46. submitForm(formName) {/* 形参 */
  47. this.$refs[formName].validate((valid) => {
  48. if (valid) {
  49. alert('注册成功!');
  50. } else {
  51. console.log('error submit!!');
  52. return false;
  53. }
  54. });
  55. },
  56. resetForm(formName) {//重置功能
  57. this.$refs[formName].resetFields();
  58. }
  59. }
  60. }
  61. </script>

整个表单绑定了一个data里的form,v-model绑定的是form,里边对应的item上双向绑定,绑定的是form里边的某一个属性值

:model="form"<el-input v-model="form.username">中的form是相对应的,还有涉及到form变量的名与ref也要相对应

添加表单样式:

  1. <style scoped>
  2. .register-cintainer {
  3. position: absolute;
  4. width: 100%;
  5. height: 100%;
  6. overflow: hidden; /*溢出隐藏*/
  7. background: url(../../assets/register.jpg);
  8. background-size: cover;
  9. }
  10. .register-form {
  11. width: 350px;
  12. height: 300px;
  13. margin: 150px auto;
  14. background-color: rgb(227, 233, 238, 0.5);
  15. padding: 70px;
  16. border-radius: 20px; /* 设置圆角 */
  17. }
  18. .register-title {
  19. text-align: center;
  20. }
  21. </style>

 运行界面:

1.2.2 在src文件夹下的api中创建 register.js

  1. import request from '@/utils/request'//引入封装好的request
  2. export function register(username, nickname, password) {//导出register方法
  3. return request({//返回一个request对象
  4. method: 'post',
  5. url: '/user/register',//这里拼的内容就是后端服务需要去判断的
  6. data:{
  7. username,
  8. nickname,
  9. password
  10. },
  11. })
  12. }

将三个数据放在data里面,通过request请求发送给服务端

1.2.3 在register.vue中引入register.js 并更改返回的内容

import { register } from '@/api/register'
  1. if (valid) {
  2. // alert('注册成功!');
  3. register(this.form.username, this.form.nickname, this.form.password)
  4. .then(response => {//调用数据库
  5. console.log(response.data);//输出从服务器上拿来的数据
  6. })

给后端服务器发送数据请求,请求的内容就是表单里写的 username,nickname,password,然后输出一下服务端返回的内容

二、服务端创建

2.1在项目文件下创建msm-serve文件夹

2.1.1 在终端输入指令npm init 生成package.json文件

 2.1.2 在终端分别安装所需要的express,mongoose,body-parser,blueimp-md5

使用express框架涉及到拿到前面请求发送过来的信息,所以需要安装body-parser.

 2.1.3 在msm-serve目录下创建app.js

  1. //!后端服务的入口
  2. var express = require('express');
  3. var bodyParser = require('body-parser');
  4. var path = require('path')//引入path模块,使用它的绝对路径去开放路径
  5. var app = express();
  6. var router = require('./router.js');
  7. app.use(bodyParser.urlencoded({ extends: false }));
  8. app.use(bodyParser.json());//引入body-parser所必要的两行代码
  9. app.use('/node_modules', express.static(path.join(__dirname, './node_modules')))
  10. //开放路径node_modules,静态托管路径要变为绝对路径,__dirname拿到本地真正的路径
  11. app.use(router);
  12. app.listen(3000, function () {
  13. console.log('running....');
  14. })

2.1.4 在msm-serve目录下创建router.js

  1. //!判断前端发送过来的请求
  2. var express = require('express');
  3. var router = express.Router();//使用express框架下的路由就可以
  4. router.post('/user/register', function (req, res) {
  5. console.log(req.body);
  6. res.send('666');//获取成功返回666
  7. })
  8. module.exports = router;//将router作为一个对象导出

成功获取数据: 

2.2 在服务端加入数据库

 router 只负责判断路径,然后去调用相应的方法,把数据给到相应的方法。真正读写数据库的时候,要写单独抽取到一个文件里,去读写数据库

2.2.1 在msm-serve目录下创建user.js

  1. //!读写数据库
  2. var mongoose = require('mongoose');
  3. mongoose.connect('mongodb://localhost/stu');
  4. //?定义规则对象
  5. var Schema = mongoose.Schema;//声明mongoose下的一个规则
  6. var userSchema = new Schema({//创建一个规则的对象,生成一个这样规则的实例
  7. username: {
  8. type: String,
  9. require: true
  10. },
  11. nickname: {
  12. type: String,
  13. require: true
  14. },
  15. password: {
  16. type: String,
  17. require: true
  18. },
  19. token: {
  20. type: String,
  21. require: true
  22. }
  23. })
  24. module.exports = mongoose.model('msm', userSchema);
  25. //将整个mongoose作为对象导出,后面规则写实例的变量名来接

2.2.2 对router.js的内容进行重写

  1. //!判断前端发送过来的请求
  2. var express = require('express');
  3. var router = express.Router();//使用express框架下的路由就可以
  4. var User = require('./user.js');
  5. var md5 = require('blueimp-md5');//加密
  6. router.post('/user/register', function (req, res) {
  7. // console.log(req.body);
  8. // res.send('666');
  9. var body = req.body;
  10. User.find({//mongoose中提供的方法,在数据库中进行查找
  11. $or: [{//用 或条件 去查数据库
  12. username: body.username//判断传入的username是否等于原数据库中存在的username
  13. }, {
  14. nickname: body.nickname
  15. }]
  16. }, function (err, data) {
  17. if (err) {
  18. return res.status(500).json({
  19. code: 3000,
  20. flag: false,
  21. message: 'server error 查询失败'
  22. })
  23. }
  24. if (data.length !== 0) {//代表上面的username或者nickname有相同
  25. return res.status(200).json({
  26. code: 4000,
  27. flag: false,
  28. message: '账号或密码已存在'
  29. })
  30. }
  31. body.token = md5(md5(body.username) + 'yzl');//业务中加密两层 yzl为密钥
  32. new User(body).save(function (err, data) {//将body写到数据库中
  33. if (err) {
  34. return res.status(500).json({
  35. code: 3000,
  36. flag: false,
  37. message: 'server error 存储失败'
  38. })
  39. }
  40. return res.json({
  41. code: 2000,
  42. flag: true,
  43. message: '注册成功'
  44. })
  45. })
  46. })
  47. })
  48. module.exports = router;//将router作为一个对象导出

2.2.3 对前端index.vue中的成功提交后判断部分进行重写

  1. if (valid) {
  2. // alert('注册成功!');
  3. register(this.form.username, this.form.nickname,
  4. this.form.password).then(response => {//调用数据库
  5. // console.log(response.data);//输出从服务器上拿来的数据
  6. const resp = response.data;//将后端服务器返回的内容接收一下
  7. if (resp.flag) {
  8. console.log('注册成功');
  9. } else {
  10. this.$message({//类似于windows中的alert方法
  11. message: resp.message,
  12. type: 'warning'//以警告的方式
  13. })
  14. }
  15. })
  16. } else {
  17. console.log('error submit!!');
  18. return false;
  19. }
  20. });

直接提交:

成功提交:

 再次提交:

 数据库中显示:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/82645
推荐阅读
相关标签
  

闽ICP备14008679号