0


Vue+MySQL实现登录注册案例

Vue+MySQL实现登录注册案例

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

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

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

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

  • 根据自己的喜好搭建页面(本人此处使用了elementUI的组件,cv前要先安装elementUI中间件)
npm i element-ui -S
<template><divclass="bg"><divid="login"><h2>登录页面</h2><el-formref="form":model="form"label-width="20%"><el-form-itemlabel="用户名:"><el-inputv-model="form.username"></el-input></el-form-item><el-form-itemlabel="密  码:"><el-inputv-model="form.password"type="password"></el-input></el-form-item></el-form><el-buttontype="primary"round@click="login"class="btn">登录</el-button><a@click="register"class="reg">前往注册</a></div></div></template>
<template><divclass="bg"><divid="register"><h2>注册页面</h2><el-formref="form":model="form"label-width="20%"><el-form-itemlabel="用户名:"><el-inputv-model="form.username"></el-input></el-form-item><el-form-itemlabel="密  码:"><el-inputv-model="form.password"type="password"></el-input></el-form-item></el-form><el-buttontype="primary"round@click="register"class="btn">注册</el-button></div></div></template>
<template><divid="main"><el-container><el-header><divclass="logo"><imgsrc="../assets/img/logo.png"><!-- 此处请提前准备好图片 --></div><divclass="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)consthome=()=>import("../views/home.vue")//懒加载constlogin=()=>import("../views/login.vue")constregister=()=>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 =newVueRouter({mode:'history',base: process.env.BASE_URL,
  routes
})//解决相同路径跳转报错问题//使用push的方法const RouterPush =VueRouter.prototype.push
VueRouter.prototype.push=functionpush(to){returnRouterPush.call(this, to).catch(err=> err)}//使用replace的方法const RouterReplace =VueRouter.prototype.replace
VueRouter.prototype.replace=functionreplace(to){returnRouterReplace.call(this, to).catch(err=> err)}exportdefault 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.params.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.params.name, req.body.params.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><divclass="bg"><divid="login"><h2>登录页面</h2><el-formref="form":model="form"label-width="20%"><el-form-itemlabel="用户名:"><el-inputv-model="form.username"></el-input></el-form-item><el-form-itemlabel="密  码:"><el-inputv-model="form.password"type="password"></el-input></el-form-item></el-form><el-buttontype="primary"round@click="login"class="btn">登录</el-button></div></div></template><script>import axios from"axios"exportdefault{data(){return{form:{username:'',password:''}};},methods:{login(){if(this.form.username ==''){this.$message.error('用户名不能为空');}elseif(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><divclass="bg"><divid="register"><h2>注册页面</h2><el-formref="form":model="form"label-width="20%"><el-form-itemlabel="用户名:"><el-inputv-model="form.username"></el-input></el-form-item><el-form-itemlabel="密  码:"><el-inputv-model="form.password"type="password"></el-input></el-form-item></el-form><el-buttontype="primary"round@click="register"class="btn">注册</el-button></div></div></template><script>import axios from"axios"exportdefault{data(){return{form:{username:'',password:''},isnull:false};},methods:{register(){if(this.form.username ==''){this.$message.error('用户名不能为空');}elseif(this.form.password ==''){this.$message.error('密码不能为空');}else{
        axios.post('http://127.0.0.1/register',{params:{name:this.form.username,password:this.form.password
          }}).then(res=>{// console.log(res.data.message);if(res.data.status ==200){this.$alert('是否返回登录页面','注册成功',{confirmButtonText:'确定',callback:action=>{this.$router.push('/login')}})}elseif(res.data.status ==202){this.$alert('用户名已存在','注册失败',{confirmButtonText:'确定',callback:action=>{this.form.username ='',this.form.password =''}})}else{
            console.log(res.message);}}).catch(err=>{
          console.log('操作失败'+ err);})}}}}</script>
<template><divid="main"><el-container><el-header><divclass="logo"><imgsrc="../assets/img/logo.png"><!-- 此处请提前准备好图片 --></div><divclass="user">
          {{username}}
        </div></el-header><el-main>main</el-main><el-footer>Footer</el-footer></el-container></div></template><script>exportdefault{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
注意:资源中不包含数据库,需自己创建数据库,并修改源码中数据库的相关信息。

标签: mysql vue.js 前端

本文转载自: https://blog.csdn.net/weixin_52580677/article/details/123369240
版权归原作者 呦呀 所有, 如有侵权,请联系我们删除。

“Vue+MySQL实现登录注册案例”的评论:

还没有评论