vue+mysql+node+express+elementui实现登录注册

vue文件中安装的组件 elementui,axios
在main.js中引入
在这里插入图片描述
expres创建node文件需要安装的插件 mysql(数据库),cors(跨域)
app.js中引入

在这里插入图片描述
创建数据库db.js
在这里插入图片描述
创建登录路由 login.js
在这里插入图片描述
index.js中引入数据库db.js
在这里插入图片描述
登录功能
Login.vue 代码

<template>
  <div class="about">
    <h1>这里是登录页面</h1>
    <form action="">
      <input type="text" v-model="username" id="user" />
      <input type="password" v-model="password" id="pwd" />
      <input type="button" @click="tohome" value="登录" id="logbtn" />
    </form>
  </div>
</template>
<script>
// import $ from "jquery";
export default {
  name: "Login",
  data() {
    return {
      username: "",
      password: "",
    };
  },
  methods: {
    tohome() {
      this.$axios
        .post("http://localhost:3000/login", {
          username: this.username,
          password: this.password,
        })
        //调用成功
        .then((result) => {
          if (result.data.status == 1) {
            //登录成功后的弹窗
            this.$message({
              message: "恭喜你,登陆成功",
              type: "success",
            });
            console.log(result.data);
            localStorage.setItem("user", JSON.stringify(result.data.data));
            //登录成功后跳转到home页面
            this.$router.push({ path: "/home" });
          }
          console.log(result.data.msg);
          this.message = result.data.msg;
        })
        //调用失败
        .catch(function (error) {
          console.log(error);
        });
    },
  },
};
</script>

vue文件 中的路由index.js

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

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    component:() => import('../views/Login.vue')
  },
  {
    path: '/home',
    name: 'Home',
    component: () => import('../views/Home')
  },
  {
    path:'/register',
    name:'Register',
    component:()=>import('../views/Register')
  },
]

const router = new VueRouter({
  routes
})

export default router

Home.vue

<template>
  <div class="home">
    这是首页页面
  </div>
</template>

<script>
// @ is an alias to /src

export default {
  name: 'Home',
  components: {
  }
}
</script>

express创建的node文件
db.js

let mysql = require('mysql');
exports.base = (sql, data, callback) => {
    // 加载数据包
    let mysql = require('mysql');

    // 创建数据库连接
    let connection = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password:'123',
        database:'yihe',
    })

    // 真正的连接数据库
    connection.connect();

    // 操作数据库(异步)
    connection.query(sql, data, function(error, results, fields) {
        if (error) throw error;
        // 用回调函数处理所有的操作
        callback(results);
    });

    // 关闭数据库
    connection.end();
}

login.js

var express = require('express');
var router = express.Router();
let db=require('../public/js/db');
const { log } = require('debug');

router.post('/', function(req, res, next) {
    //从前端发过来的值 req.body
    let info=req.body
   //查找数据库中有没有相同的值
   let data=[info.username,info.password]
   let sql='select * from `login` where username=? and password=?'
   db.base(sql, data,(result) =>{//数组包对象格式
    //  从数据库中查的值
       if(result.length!=0){
           console.log('登陆成功');
           //通过判断返回status的状态值渲染页面
           return res.json({status:1, msg:'登录成功',data:result[0]})
       }else{
            console.log('用户名不存在或者密码错误');
           return res.json({status:2, msg:'用户名不存在或者密码错误'})
  
       }
   })
    
  });
router.post('/name', function(req, res, next) {
  });
module.exports = router;

注册功能 register.vue

<template>
  <div>
    <h1>注册页面</h1>
    <form action="">
      <div>
        <label for="username">用户名: </label>
        <input type="text" name="username" v-model="username" id="uname" />
      </div>
      <div>
        <label for="password">密码:</label>
        <input type="password" name="password" v-model="password" id="pwd" />
      </div>
      <div>
        <input type="button" @click="subbtn" value="注册" id="regbtn" />
      </div>
    </form>
  </div>
</template>
<script>
// import qs from 'qs'
export default {
  name: "Register",
  data() {
    return {
      username: "",
      password: "",
    };
  },
  methods: {
    subbtn() {
      this.$axios
        .post("http://localhost:3000/register", {
          username: this.username,
          password: this.password,
        })
        .then((result) => {
          if (result.data.status == 1) {
            this.$message({
              message: "恭喜你,注册成功",
              type: "success",
            });
            console.log(result.data);
            localStorage.setItem("user", JSON.stringify(result.data.data));
            this.$router.push({ path: "/home" });
          } else {
            console.log(result.data.msg);
            this.$message({
              message: "该用户名已被注册",
              type: "error",
            });
          }
        })
        .catch(function (error) {
          console.log(error);
        });
    },
  },
};
</script>

node文件中 app.js中·引入 register路由
在这里插入图片描述
注册路由 register.js

var express = require('express');
var router = express.Router();
let db = require('../public/js/db');
const {
    log
} = require('debug');

     //注册成功(在数据库中做去重功能后)
router.post('/', function (req, res, next) {
    //从前端发过来的值 req.body
   let info = req.body
    //查找数据库中有没有相同的值
   let data = [info.username, info.password]
   let sql='select * from `login` where username=?'
   db.base(sql, data,(result) =>{//数组包对象格式
    //  从数据库中查的值
       if(result.length==0){
        let sql = `insert into login(username,password) values(?,?)`;
        db.base(sql,data,(result) => { //数组包对象格式
            console.log(result);
           if(result){
               console.log('注册成功');
               return res.json({status:1, msg:'注册成功', data:result[0]})
           }else{
               console.log('注册失败');
               return res.json({status:2,msg:'注册失败'});
           }
        })
       }else{
            console.log('用户名已被注册');
           return res.json({status:2, msg:'用户名已被注册'})
       }
   })



     //注册成功(没有在数据库中做去重功能)
    // let sql = `insert into login(username,password) values(?,?)`;
    // db.base(sql,data,(result) => { //数组包对象格式
    //     console.log(result);
    //    if(result){
    //        console.log('注册成功');
    //        return res.json({status:1, msg:'注册成功', data:result[0]})
    //    }else{
    //        console.log('注册失败');
    //        return res.json({status:2,msg:'注册失败'});
    //    }
    // })
});
// router.post('/name', function (req, res, next) {});
module.exports = router;

加了正则判断后的注册
register.vue

<template>
  <div>
    <el-form :model="formData" :rules="rule" ref="form">
      <el-form-item label="用户名" prop="username" >
        <el-input
          v-model="formData.username"
          placeholder="请输入用户名"
          style='width:auto'
        ></el-input>
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-input
          v-model="formData.password"
          placeholder="请输入密码"
          style='width:auto'
        ></el-input>
      </el-form-item>
      <el-form-item>
        <el-button @click="subform('form')">注册</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
import qs from "qs";
export default {
  data() {
    return {
      formData: {
        username: "",
        password: "",
      },
      rule: {
        username: [
          { required: true, message: "请输入用户名", trigger: "blur" },
          { min: 2, max: 10, message: "长度在2到10个字符", trigger: "blur" },
          {
            required: true,
            pattern: /^[\u4e00-\u9fa5_a-zA-Z0-9.·-]+$/,
            message: "用户名不支持特殊字符",
            trigger: "blur",
          },
        ],
        password: [
          { required: true, message: "请输入密码", trigger: "blur" },
          { min: 6, max: 12, message: "请输入6到12位密码", trigger: "blur" },
          {
            required: true,
            pattern: /^[a-zA-Z0-9]{6,12}$/,
            message: "请输入英文或数字",
            trigger: "blur",
          },
        ],
      },
    };
  },
  methods: {
    subform(formData) {
      this.$refs[formData].validate((valid) => {
        if (valid) {
          // console.warn(this.formData.username,this.formData.password)
          let params = {
            username: this.formData.username,
            password: this.formData.password,
          };
          this.$axios
            .post("http://localhost:3000/register", qs.stringify(params))
            .then((result) => {
              console.error(result);
              if (result.data.status == 1) {
                this.$message({
                  message: "恭喜你,注册成功",
                  type: "success",
                });
                console.log(result.data);
                localStorage.setItem("user", JSON.stringify(result.data.data));
                // this.$router.push({ path: "/home" });不支持跳转功能
              } else {
                console.log(result.data.msg);
                this.$message({
                  message: "该用户名已被注册",
                  type: "error",
                });
              }
            })
            .catch(function (error) {
              console.log(error);
            });
        }else{
          console.log('error submit');
          return false;
        }
      });
    },
  },
};
</script>

注意:el-form-item中尽量不要设置 label-width=‘auto’,否则会报错,

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现Vue+MySQL登录注册功能,你需要先创建一个后端服务,可以选择使用Node.js + Express框架来实现。在后端服务中,你可以使用MySQL数据库来存储用户的账号信息。 下面是一个简单的示例: 1. 创建一个名为`users`的MySQL表,用于存储用户账号信息,包括`id`、`username`、`password`等字段。 2. 在后端服务中,使用`mysql`模块连接到MySQL数据库,并且编写相应的API接口: ``` const mysql = require('mysql'); const express = require('express'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.json()); const connection = mysql.createConnection({ host: 'localhost', user: 'your_mysql_username', password: 'your_mysql_password', database: 'your_database_name' }); // 用户注册接口 app.post('/api/register', (req, res) => { const { username, password } = req.body; connection.query( 'INSERT INTO users (username, password) VALUES (?, ?)', [username, password], (error, results, fields) => { if (error) { res.status(500).json({ message: '注册失败' }); } else { res.json({ message: '注册成功' }); } } ); }); // 用户登录接口 app.post('/api/login', (req, res) => { const { username, password } = req.body; connection.query( 'SELECT * FROM users WHERE username = ? AND password = ?', [username, password], (error, results, fields) => { if (error) { res.status(500).json({ message: '登录失败' }); } else { if (results.length === 0) { res.status(401).json({ message: '用户名或密码错误' }); } else { res.json({ message: '登录成功' }); } } } ); }); app.listen(3000, () => console.log('Server is running on port 3000')); ``` 3. 在Vue中,你可以使用`axios`模块来发送请求到后端服务,并且根据返回的数据来更新页面。 ``` <template> <div> <h2>注册</h2> <form @submit.prevent="register"> <label>用户名:</label> <input v-model="username" type="text"> <br> <label>密码:</label> <input v-model="password" type="password"> <br> <button type="submit">注册</button> </form> <h2>登录</h2> <form @submit.prevent="login"> <label>用户名:</label> <input v-model="username" type="text"> <br> <label>密码:</label> <input v-model="password" type="password"> <br> <button type="submit">登录</button> </form> </div> </template> <script> import axios from 'axios'; export default { data() { return { username: '', password: '' }; }, methods: { register() { axios.post('/api/register', { username: this.username, password: this.password }).then(response => { alert(response.data.message); }).catch(error => { console.error(error); }); }, login() { axios.post('/api/login', { username: this.username, password: this.password }).then(response => { alert(response.data.message); }).catch(error => { console.error(error); }); } } }; </script> ``` 以上示例代码仅供参考,你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

coderdwy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值