Vue+MySQL实现登录注册案例

该博客详细介绍了如何使用Vue.js和MySQL构建登录注册系统。首先,新建Vue项目并连接MySQL数据库,接着创建登录、注册和首页界面,利用elementUI美化。然后配置页面路由,编写/server/API/login.js处理请求,再在router.js中配置路由。最后,在各视图组件中实现相应功能。提供了一个完整的登录注册演示项目源码。
摘要由CSDN通过智能技术生成

Vue+MySQL实现登录注册案例

1.新建vue项目并连接数据库

具体步骤见vue连接mysql数据库

2.新建登录页面、注册页面和首页

在src/views文件夹下,新建 login.vue(登录页面)、register.vue(注册页面) 和 home.vue(首页)

  • 根据自己的喜好搭建页面(本人此处使用了elementUI的组件,cv前要先安装elementUI中间件)
npm i element-ui -S
<template>
  <div class="bg">
    <div id="login">
        <h2>登录页面</h2>
        <el-form ref="form" :model="form" label-width="20%">
        <el-form-item label="用户名:">
            <el-input v-model="form.username"></el-input>
        </el-form-item>
        <el-form-item label="密  码:">
            <el-input v-model="form.password" type="password"></el-input>
        </el-form-item>
        </el-form>
        <el-button type="primary" round @click="login" class="btn">登录</el-button>
        <a @click="register" class="reg">前往注册</a>
    </div>
  </div>
</template>
<template>
  <div class="bg">
    <div id="register">
        <h2>注册页面</h2>
        <el-form ref="form" :model="form" label-width="20%">
        <el-form-item label="用户名:">
            <el-input v-model="form.username"></el-input>
        </el-form-item>
        <el-form-item label="密  码:">
            <el-input v-model="form.password" type="password"></el-input>
        </el-form-item>
        </el-form>
        <el-button type="primary" round @click="register" class="btn">注册</el-button>
    </div>
  </div>
</template>

<template>
  <div id="main">
    <el-container>
      <el-header>
        <div class="logo" >
          <img src="../assets/img/logo.png">  <!-- 此处请提前准备好图片 -->
        </div>
        <div class="user">
          {{username}}
        </div>
      </el-header>
      <el-main>main</el-main>
      <el-footer>Footer</el-footer>
    </el-container>
  </div>
</template>
  • 页面效果
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.页面路由配置

在src/router/index.js中配置页面对应路由

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const home = () => import("../views/home.vue")    //懒加载
const login = () => import("../views/login.vue")
const register = () => import("../views/register.vue")

const routes = [
  {
    path: '',
    redirect: '/login'   //重定向
  }{
    path: '/login',
    name: 'login',
    component: login
  },
  {
    path: '/register',
    name: 'register',
    component: register
  },
  {
    path: '/home',
    name: 'home',
    component: home,
  }
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

//解决相同路径跳转报错问题
//使用push的方法
const RouterPush = VueRouter.prototype.push
VueRouter.prototype.push = function push (to) {
  return RouterPush.call(this, to).catch(err => err)
}

//使用replace的方法
const RouterReplace = VueRouter.prototype.replace
VueRouter.prototype.replace = function replace (to) {
  return RouterReplace.call(this, to).catch(err => err)
}

export default router

4.新建/server/API/login.js

接收 req.query / req.bosy 传递来的参数,通过查询语句查询对应数据并放回结果

let db = require('../db/index')

exports.login = (req, res) => {
  var sql = 'select * from user where name = ? and password = ?'
  db.query(sql, [req.query.name, req.query.password], (err, data) => {
      if(err) {
          return res.send({
            status: 400,
            message: "登录失败"
          })
      }
      
      if(data.length > 0) {
        res.send({
          status: 200,
          message: "登录成功"
        })
      }else{
        res.send({
          status: 202,
          message: '用户名或密码错误'
        })
      }
  })
}

exports.register = (req, res) => {
  const sql1 = 'select * from user where name = ?'
  const sql2 = 'insert into user (name, password) value (?, ?)'
  db.query(sql1, [req.body.name], (err, data) => {
    if(err) {
      return res.send({
        status: 400,
        message: "操作失败"
      })
    }
    if(data.length > 0) {
      return res.send({
        status: 202,
        message: '用户名已存在'
      })
    }else{
      db.query(sql2, [req.body.name, req.body.password], (err, data) => {
        if(err) {
            return res.send({
              status: 400,
              message: "注册失败"
            })
        }
        res.send({
          status: 200,
          message: "注册成功"
        })
      })
    }
  })
}

5.在/server/router.js中配置对应路由

let express = require('express')
let router = express.Router()
let login = require('./API/login')

router.get('/login', login.login)
router.post('/register', login.register)

module.exports = router

6.在/views/login.vue、/views/register.vue和/views/home.vue中编写相应方法

<template>
  <div class="bg">
    <div id="login">
        <h2>登录页面</h2>
        <el-form ref="form" :model="form" label-width="20%">
        <el-form-item label="用户名:">
            <el-input v-model="form.username"></el-input>
        </el-form-item>
        <el-form-item label="密  码:">
            <el-input v-model="form.password" type="password"></el-input>
        </el-form-item>
        </el-form>
        <el-button type="primary" round @click="login" class="btn">登录</el-button>
    </div>
  </div>
</template>

<script>
import axios from "axios"
export default {
  data () {
    return {
      form: {
        username: '',
        password: ''  
      }
    };
  },

  methods: {
    login() {
      if(this.form.username == '') {
        this.$message.error('用户名不能为空');
      }else if(this.form.password == '') {
        this.$message.error('密码不能为空');
      }else{
        axios.get('http://127.0.0.1/login', {
          params: {
            name: this.form.username,
            password: this.form.password
          }
        }).then(res=>{
          if(res.data.status == 200) {
            this.$router.push({
              path: '/home',
              query: {
                name: this.form.username
              }
            })
          }else{
            this.$alert('用户名或密码错误', '登录失败', {
              confirmButtonText: '确定',
              callback: action => {
                this.form.username = '',
                this.form.password = ''
              }
            });
          }
        }).catch(err=>{
            console.log("登录失败" + err);
        })
      }
    },
    register() {
      this.$router.push('/register')
    }
  }
}
</script>
<template>
  <div class="bg">
    <div id="register">
        <h2>注册页面</h2>
        <el-form ref="form" :model="form" label-width="20%">
        <el-form-item label="用户名:">
            <el-input v-model="form.name"></el-input>
        </el-form-item>
        <el-form-item label="密  码:">
            <el-input v-model="form.password" type="password"></el-input>
        </el-form-item>
        </el-form>
        <el-button type="primary" round @click="register" class="btn">注册</el-button>
    </div>
  </div>
</template>

<script>
import axios from "axios"
export default {
  data () {
    return {
      form: {
        name: '',
        password: ''  
      },
      isnull: false
    };
  },
 
  methods: {
    register() {
      if(this.form.name == '') {
        this.$message.error('用户名不能为空');
      }else if(this.form.password == '') {
        this.$message.error('密码不能为空');
      }else{
        axios.post('http://127.0.0.1/register', this.form})
        .then(res => {
          // console.log(res.data.message);
          if(res.data.status == 200) {
            this.$alert('是否返回登录页面', '注册成功', {
              confirmButtonText: '确定',
              callback: action => {
                this.$router.push('/login')
              }
            })
          }else if(res.data.status == 202) {
            this.$alert('用户名已存在', '注册失败', {
              confirmButtonText: '确定',
              callback: action => {
                this.form.name = '',
                this.form.password = ''
              }
            })
          }else{
            console.log(res.message);
          }
        }).catch(err => {
          console.log('操作失败' + err);
        })
      }
    }
  }
}
</script>
<template>
  <div id="main">
    <el-container>
      <el-header>
        <div class="logo" >
          <img src="../assets/img/logo.png">  <!-- 此处请提前准备好图片 -->
        </div>
        <div class="user">
          {{username}}
        </div>
      </el-header>
      <el-main>main</el-main>
      <el-footer>Footer</el-footer>
    </el-container>
  </div>
</template>
<script>
  export default {
    name: 'Main',
    data() {
      return{
        username: ''
      }
    },
    created() {  //页面创建时,把路由传递来的用户名赋值给data中的username,这样就可以在页面显示用户名了(效果见首页的右上角)
      this.username = this.$route.query.name;
    }
  }
</script>

效果展示

登录注册demo

git源码地址:https://gitee.com/xie-xiaochun/login-registration-demo
注意:资源中不包含数据库,需自己创建数据库,并修改源码中数据库的相关信息。

Vue3是目前前端开发中非常流行的一种JavaScript框架。它的特点是简单、易学、高效,并且有着很好的可扩展性。登录注册是Web应用中常见的功能,下面是一个使用Vue3实现的简单的登录注册项目案例: 1. 首先,你需要创建一个Vue3项目,可以使用Vue CLI等工具来快速搭建。 2. 接下来,你需要在Vue3项目中安装Vue Router和Vuex,它们分别用于管理路由和状态。 3. 然后,在src目录下创建一个views文件夹,用于存放所有的页面组件。在views文件夹下创建Login.vue和Register.vue两个组件。 4. 在Login.vue中,你可以编写登录表单,并且在表单中添加相应的数据绑定和事件处理逻辑。 5. 在Register.vue中,你可以编写注册表单,并且在表单中添加相应的数据绑定和事件处理逻辑。 6. 接着,在src目录下创建一个store文件夹,用于存放Vuex相关的代码。在store文件夹下创建一个user.js文件,用于管理用户信息。 7. 在user.js文件中,你可以定义一个state对象来存储用户信息,同时定义一些mutation和action来修改和获取用户信息。 8. 最后,在src目录下创建一个router.js文件,用于管理路由。在router.js文件中,你可以定义两个路由:一个用于显示登录页面,另一个用于显示注册页面。 这样,一个简单的Vue3登录注册项目就完成了。当用户输入用户名和密码进行登录或者注册时,相应的数据会被提交到后端进行处理,并且根据后端返回的结果来更新用户信息和路由跳转等操作。
评论 129
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呦呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值