最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Vue+MySQL實(shí)現(xiàn)登錄注冊(cè)的實(shí)戰(zhàn)案例

 更新時(shí)間:2022年05月09日 10:19:17   作者:呦呀  
第一次用Vue+MySQL實(shí)現(xiàn)注冊(cè)登錄功能,就已經(jīng)踩了很多坑,下面這篇文章主要給大家介紹了關(guān)于使用Vue+MySQL實(shí)現(xiàn)登錄注冊(cè)案例的相關(guān)資料,需要的朋友可以參考下

1.新建vue項(xiàng)目并連接數(shù)據(jù)庫

具體步驟見vue連接mysql數(shù)據(jù)庫

2.新建登錄頁面、注冊(cè)頁面和首頁

在src/views文件夾下,新建 login.vue(登錄頁面)、register.vue(注冊(cè)頁面) 和 home.vue(首頁)

根據(jù)自己的喜好搭建頁面(本人此處使用了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">前往注冊(cè)</a>
    </div>
  </div>
</template>
<template>
  <div class="bg">
    <div id="register">
        <h2>注冊(cè)頁面</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">注冊(cè)</el-button>
    </div>
  </div>
</template>

<template>
  <div id="main">
    <el-container>
      <el-header>
        <div class="logo" >
          <img src="../assets/img/logo.png">  <!-- 此處請(qǐng)?zhí)崆皽?zhǔn)備好圖片 -->
        </div>
        <div class="user">
          {{username}}
        </div>
      </el-header>
      <el-main>main</el-main>
      <el-footer>Footer</el-footer>
    </el-container>
  </div>
</template>

頁面效果

3.頁面路由配置

在src/router/index.js中配置頁面對(duì)應(yīng)路由

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
})

//解決相同路徑跳轉(zhuǎn)報(bào)錯(cuò)問題
//使用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 傳遞來的參數(shù),通過查詢語句查詢對(duì)應(yīng)數(shù)據(jù)并放回結(jié)果

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: '用戶名或密碼錯(cuò)誤'
        })
      }
  })
}

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: "注冊(cè)失敗"
            })
        }
        res.send({
          status: 200,
          message: "注冊(cè)成功"
        })
      })
    }
  })
}

5.在/server/router.js中配置對(duì)應(yīng)路由

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中編寫相應(yīng)方法

<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('用戶名或密碼錯(cuò)誤', '登錄失敗', {
              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>注冊(cè)頁面</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">注冊(cè)</el-button>
    </div>
  </div>
</template>

<script>
import axios from "axios"
export default {
  data () {
    return {
      form: {
        username: '',
        password: ''  
      },
      isnull: false
    };
  },
 
  methods: {
    register() {
      if(this.form.username == '') {
        this.$message.error('用戶名不能為空');
      }else if(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('是否返回登錄頁面', '注冊(cè)成功', {
              confirmButtonText: '確定',
              callback: action => {
                this.$router.push('/login')
              }
            })
          }else if(res.data.status == 202) {
            this.$alert('用戶名已存在', '注冊(cè)失敗', {
              confirmButtonText: '確定',
              callback: action => {
                this.form.username = '',
                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">  <!-- 此處請(qǐng)?zhí)崆皽?zhǔn)備好圖片 -->
        </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() {  //頁面創(chuàng)建時(shí),把路由傳遞來的用戶名賦值給data中的username,這樣就可以在頁面顯示用戶名了(效果見首頁的右上角)
      this.username = this.$route.query.name;
    }
  }
</script>

效果展示

登錄注冊(cè)demo

git源碼地址:https://gitee.com/xie-xiaochun/login-registration-demo
注意:資源中不包含數(shù)據(jù)庫,需自己創(chuàng)建數(shù)據(jù)庫,并修改源碼中數(shù)據(jù)庫的相關(guān)信息。

總結(jié) 

到此這篇關(guān)于使用Vue+MySQL實(shí)現(xiàn)登錄注冊(cè)的文章就介紹到這了,更多相關(guān)Vue+MySQL登錄注冊(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue數(shù)據(jù)push后不能響應(yīng)式更新的問題

    vue數(shù)據(jù)push后不能響應(yīng)式更新的問題

    這篇文章主要介紹了vue數(shù)據(jù)push后不能響應(yīng)式更新的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue實(shí)現(xiàn)簡單實(shí)時(shí)匯率計(jì)算功能

    vue實(shí)現(xiàn)簡單實(shí)時(shí)匯率計(jì)算功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)簡單實(shí)時(shí)匯率計(jì)算功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 基于Vuejs框架實(shí)現(xiàn)翻頁組件

    基于Vuejs框架實(shí)現(xiàn)翻頁組件

    這篇文章主要為大家詳細(xì)介紹了基于VueJs框架的翻頁組件,小巧精致,性能優(yōu)異的MVVM框架實(shí)現(xiàn)翻頁組件,也適用于angular,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • vue彈窗里面使用echarts不顯示的問題及解決

    vue彈窗里面使用echarts不顯示的問題及解決

    這篇文章主要介紹了vue彈窗里面使用echarts不顯示的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue項(xiàng)目中使用Bootstrap

    Vue項(xiàng)目中使用Bootstrap

    這篇文章介紹了Vue項(xiàng)目中使用Bootstrap的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Vue-Router模式和鉤子的用法

    Vue-Router模式和鉤子的用法

    本篇文章主要介紹了Vue-Router模式和鉤子的用法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • uniapp微信小程序webview和h5數(shù)據(jù)通信代碼示例

    uniapp微信小程序webview和h5數(shù)據(jù)通信代碼示例

    這篇文章主要介紹了uniapp微信小程序webview和h5數(shù)據(jù)通信的相關(guān)資料,文章還列出了項(xiàng)目的結(jié)構(gòu),包括微信小程序和h5端的主要文件和組件,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • vite創(chuàng)建vue3項(xiàng)目頁面引用public下js文件失敗解決辦法

    vite創(chuàng)建vue3項(xiàng)目頁面引用public下js文件失敗解決辦法

    Vue3相較于之前的版本有了不少變化,如引用全局Js文件,這篇文章主要給大家介紹了關(guān)于vite創(chuàng)建vue3項(xiàng)目頁面引用public下js文件失敗的解決辦法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Vue插件寫、用詳解(附demo)

    Vue插件寫、用詳解(附demo)

    本篇文章主要介紹了Vue插件寫、用詳解(附demo),插件就是指對(duì)Vue的功能的增強(qiáng)或補(bǔ)充。有興趣的可以了解一下。
    2017-03-03
  • vue報(bào)錯(cuò)Error:Cannot?find?module?'fs/promises'的解決方式

    vue報(bào)錯(cuò)Error:Cannot?find?module?'fs/promises'的解決方

    最近的項(xiàng)目需要用到vue/cli,但是用cnpm安裝vue/cli的時(shí)候報(bào)錯(cuò)了,下面這篇文章主要給大家介紹了關(guān)于vue報(bào)錯(cuò)Error:Cannot?find?module?'fs/promises'的解決方式,需要的朋友可以參考下
    2022-11-11

最新評(píng)論

花莲市| 金沙县| 洞口县| 方正县| 宁晋县| 拉萨市| 普宁市| 柳林县| 修武县| 台东县| 巴彦淖尔市| 商洛市| 永平县| 巴青县| 建平县| 通许县| 大同市| 南皮县| 天全县| 和静县| 商南县| 贺兰县| 小金县| 恭城| 裕民县| 乌海市| 武乡县| 抚松县| 偏关县| 黄陵县| 夏河县| 望谟县| 兰考县| 宁河县| 松阳县| 广平县| 岚皋县| 泰顺县| 略阳县| 平泉县| 青神县|