赞
踩
1.1.1 在 src\router\index.js 中配置路由(把原有的路由配置删除),并添加对index.vue的引入,如下:
- import Vue from "vue";
- import VueRouter from "vue-router";
- import Register from "../views/register";
-
- Vue.use(VueRouter);
-
- const routes = [//在路由里进行注册
- {
- path: '/register',
- name: 'Register',
- component: Register,//引入的组件
- }
- ];
-
- const router = new VueRouter({
- mode: "history",
- base: process.env.BASE_URL,
- routes,
- });
-
- export default router;
通过 import Register from './views/register' 导入组件(引入就是引到文件夹的名),当前只指定了组件路径,默认导入的就是指定路径下的 index.vue 组件
在element-ui中获取需要的表单,表单部分代码:
首先在template标签里写页面的相应组件,表单使用element-ui官网里的例子。
- <template>
- <div>
- <el-form
- :model="form"
- status-icon
- :rules="rules"
- ref="form"
- label-width="100px"
- class="demo-form"
- >
- <el-form-item
- label="账号"
- prop="username"
- >
- <el-input v-model="form.username"></el-input>
- </el-form-item>
- <el-form-item
- label="昵称"
- prop="nickname"
- >
- <el-input v-model="form.nickname"></el-input>
- </el-form-item>
- <el-form-item
- label="密码"
- prop="password"
- >
- <el-input
- type="password"
- v-model="form.password"
- autocomplete="off"
- ></el-input>
- </el-form-item>
- <el-form-item
- label="确认密码"
- prop="checkPass"
- >
- <el-input
- type="password"
- v-model="form.checkPass"
- autocomplete="off"
- ></el-input>
- </el-form-item>
- <el-form-item>
- <el-button
- type="primary"
- @click="submitForm('form')"
- >提交</el-button>
- <el-button @click="resetForm('form')">重置</el-button>
- </el-form-item>
- </el-form>
- </div>
- </template>
表单规则代码如下:
- <script>
- export default {
- data() {
- var validatePass = (rule, value, callback) => {
- if (value === '') {
- callback(new Error('请输入密码'));
- } else {
- if (this.form.checkPass !== '') {
- this.$refs.form.validateField('checkPass');
- }
- callback();
- }
- };
- var validatePass2 = (rule, value, callback) => {
- if (value === '') {
- callback(new Error('请再次输入密码'));
- } else if (value !== this.form.password) {
- callback(new Error('两次输入密码不一致!'));
- } else {
- callback();
- }
- };
- return {
- form: {
- username: '',
- nickname: '',
- password: '',
- checkPass: '',
- },
- rules: {//判断规则
- username: [{ required: 'true', message: '账号不能为空', trigger: 'blur'
- }],//required:这一项是必需的
- nickname: [{ required: 'true', message: '昵称不能为空', trigger: 'blur'
- }],
- password: [
- { validator: validatePass, trigger: 'blur' }//触发条件:失焦
- ],
- checkPass: [
- { validator: validatePass2, trigger: 'blur' }
- ],
- }
- }
- },
-
- components: {},
-
- methods: {
- submitForm(formName) {/* 形参 */
- this.$refs[formName].validate((valid) => {
- if (valid) {
- alert('注册成功!');
-
- } else {
- console.log('error submit!!');
- return false;
- }
- });
- },
- resetForm(formName) {//重置功能
- this.$refs[formName].resetFields();
- }
- }
- }
- </script>
整个表单绑定了一个data里的form,v-model绑定的是form,里边对应的item上双向绑定,绑定的是form里边的某一个属性值
:model="form"与<el-input v-model="form.username">中的form是相对应的,还有涉及到form变量的名与ref也要相对应
添加表单样式:
- <style scoped>
- .register-cintainer {
- position: absolute;
- width: 100%;
- height: 100%;
- overflow: hidden; /*溢出隐藏*/
- background: url(../../assets/register.jpg);
- background-size: cover;
- }
- .register-form {
- width: 350px;
- height: 300px;
- margin: 150px auto;
- background-color: rgb(227, 233, 238, 0.5);
- padding: 70px;
- border-radius: 20px; /* 设置圆角 */
- }
- .register-title {
- text-align: center;
- }
- </style>
运行界面:
- import request from '@/utils/request'//引入封装好的request
-
- export function register(username, nickname, password) {//导出register方法
- return request({//返回一个request对象
- method: 'post',
- url: '/user/register',//这里拼的内容就是后端服务需要去判断的
- data:{
- username,
- nickname,
- password
- },
- })
- }
将三个数据放在data里面,通过request请求发送给服务端
import { register } from '@/api/register'
- if (valid) {
- // alert('注册成功!');
- register(this.form.username, this.form.nickname, this.form.password)
- .then(response => {//调用数据库
- console.log(response.data);//输出从服务器上拿来的数据
- })
给后端服务器发送数据请求,请求的内容就是表单里写的 username,nickname,password,然后输出一下服务端返回的内容
使用express框架涉及到拿到前面请求发送过来的信息,所以需要安装body-parser.
- //!后端服务的入口
- var express = require('express');
- var bodyParser = require('body-parser');
- var path = require('path')//引入path模块,使用它的绝对路径去开放路径
- var app = express();
- var router = require('./router.js');
-
- app.use(bodyParser.urlencoded({ extends: false }));
- app.use(bodyParser.json());//引入body-parser所必要的两行代码
-
- app.use('/node_modules', express.static(path.join(__dirname, './node_modules')))
- //开放路径node_modules,静态托管路径要变为绝对路径,__dirname拿到本地真正的路径
-
- app.use(router);
-
- app.listen(3000, function () {
- console.log('running....');
- })
- //!判断前端发送过来的请求
- var express = require('express');
- var router = express.Router();//使用express框架下的路由就可以
-
- router.post('/user/register', function (req, res) {
- console.log(req.body);
- res.send('666');//获取成功返回666
- })
-
- module.exports = router;//将router作为一个对象导出
成功获取数据:
router 只负责判断路径,然后去调用相应的方法,把数据给到相应的方法。真正读写数据库的时候,要写单独抽取到一个文件里,去读写数据库
- //!读写数据库
- var mongoose = require('mongoose');
- mongoose.connect('mongodb://localhost/stu');
-
- //?定义规则对象
- var Schema = mongoose.Schema;//声明mongoose下的一个规则
- var userSchema = new Schema({//创建一个规则的对象,生成一个这样规则的实例
- username: {
- type: String,
- require: true
- },
- nickname: {
- type: String,
- require: true
- },
- password: {
- type: String,
- require: true
- },
- token: {
- type: String,
- require: true
- }
- })
- module.exports = mongoose.model('msm', userSchema);
- //将整个mongoose作为对象导出,后面规则写实例的变量名来接
- //!判断前端发送过来的请求
- var express = require('express');
- var router = express.Router();//使用express框架下的路由就可以
- var User = require('./user.js');
- var md5 = require('blueimp-md5');//加密
-
- router.post('/user/register', function (req, res) {
- // console.log(req.body);
- // res.send('666');
- var body = req.body;
- User.find({//mongoose中提供的方法,在数据库中进行查找
- $or: [{//用 或条件 去查数据库
- username: body.username//判断传入的username是否等于原数据库中存在的username
- }, {
- nickname: body.nickname
- }]
- }, function (err, data) {
- if (err) {
- return res.status(500).json({
- code: 3000,
- flag: false,
- message: 'server error 查询失败'
- })
- }
- if (data.length !== 0) {//代表上面的username或者nickname有相同
- return res.status(200).json({
- code: 4000,
- flag: false,
- message: '账号或密码已存在'
- })
- }
- body.token = md5(md5(body.username) + 'yzl');//业务中加密两层 yzl为密钥
- new User(body).save(function (err, data) {//将body写到数据库中
- if (err) {
- return res.status(500).json({
- code: 3000,
- flag: false,
- message: 'server error 存储失败'
- })
- }
- return res.json({
- code: 2000,
- flag: true,
- message: '注册成功'
- })
- })
- })
- })
-
- module.exports = router;//将router作为一个对象导出
- if (valid) {
- // alert('注册成功!');
- register(this.form.username, this.form.nickname,
- this.form.password).then(response => {//调用数据库
- // console.log(response.data);//输出从服务器上拿来的数据
- const resp = response.data;//将后端服务器返回的内容接收一下
- if (resp.flag) {
- console.log('注册成功');
- } else {
- this.$message({//类似于windows中的alert方法
- message: resp.message,
- type: 'warning'//以警告的方式
- })
- }
- })
- } else {
- console.log('error submit!!');
- return false;
- }
- });
直接提交:
成功提交:
再次提交:
数据库中显示:
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。