vue+node+mysql实现登录注册功能

1.创建目录
在这里插入图片描述
2.安装需要用到的axios,mysql, express, body-parser

npm install axios mysql express body-parser --save(回车)

3.server/app.js

// 创建express服务器
const express = require('express')
const app = express()
    // 注册解析 表单数据的 body-parser
const bodyParser = require('body-parser')
    // 将请求响应设置content-type设置为application/json
const router = require('./router.js')
app.use('/api/*', function(req, res, next) {
    // 设置请求头为允许跨域
    res.header("Access-Control-Allow-Origin", "*");
    // 设置服务器支持的所有头信息字段
    res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
    // 设置服务器支持的所有跨域请求的方法
    res.header("Access-Control-Allow-Methods", "POST,GET");
    // next()方法表示进入下一个路由
    next();
});
// post
app.use(bodyParser.urlencoded({ extended: false }))
    // 处理json格式的参数
app.use(bodyParser.json())
    // 配置路由
app.use(router)
    // 服务器已经启动
app.listen('4000', function(res) {
    console.log('running...')
    console.log(res)
})

4.server/db.js
在mysql数据库中创建一个test_database数据库,

let mysql = require('mysql')
exports.base = (sql, data, callback) => {
    let connection = mysql.createConnection({
        host: 'localhost', //本机连接不用改动
        user: 'root', //root用户一般默认都有,可以不改
        password: '123456', //改成自己的密码
        database: 'test_database' //改成自己的数据库名(注意数据库名和表名的区别)
    })
    connection.connect();
    //如果不存在,创建数据库test_database,数据库表Login
    connection.query("create table if not exists Login\
     (`username` varchar(16) unique not null,`password` varchar(16) not null);", (error, results, fields) => {
        if (error) throw error; {
            console.log(error)
        }
        console.log(results)
    })
    connection.query(sql, data, (error, results, fields) => {
        if (error) {
            console.log(error)
        }
        console.log(results)
        callback && callback(results, error)
    })
    connection.end();
}

5.server/router.js

const express = require('express')
const router = express.Router()
const services = require('./services.js')
    // router.get('/',services.start)
    // 登录功能
router.post('/api/login', services.login)
    // 注册功能
router.post('/api/register', services.register)
module.exports = router

6.server/services.js

const db = require('./db.js')
exports.start = (req, res) => {}
    // 登录注册处理
exports.login = (req, res) => {
    let username = req.body.username
    let pwd = req.body.password
        // 查询语句
    let sql = 'select * from Login where username = ?'
    db.base(sql, username, (result, error) => {
        if (!result.length) {
            return res.json({ status: 0, msg: '登录失败' })
        } else {
            // [ RowDataPacket { password: '123', username: 'admin', id: 1 } ]
            if (result[0].password == pwd) {
                return res.json({ status: 1, msg: '登录成功' })
            }
            return res.json({ status: 1, msg: '密码错误' })
        }
    })
}
exports.register = (req, res) => {
    let username = req.body.username
    let pwd = req.body.password
        // 插入语句
    let sql = 'insert into Login values(?,?)'
    try {
        db.base(sql, [username, pwd], (result, error) => {
            if (error) {
                console.log(result)
                console.log(error + "12345323")
                return res.json({ status: 0, msg: error.sqlMessage })
            } else {
                return res.json({ status: 1, msg: "注册成功" })
            }
        })
    } catch (err) {
        console.log(err)
    }

}

7.src/components/HelloWorld.vue

<template>
    <form>
        <label for="username">用户名:</label>
        <input type="text" v-model="username" id="username">
        <br>
        <label for="pwd">密码:</label>
        <input type="text" v-model="pwd" id="pwd">
        <br>
        <button @click.prevent="login">登录</button>
        <button @click.prevent="register">注册</button>
        <div>{{msg}}</div>
    </form>
</template>
<script>
export default {
    data(){
        return {
            username:'',
            pwd:'',
            msg:''//接收数据
        }
    },
    methods:{
        login(){
            this.$axios.post(this.HOST+'/api/login',{username:this.username,password:this.pwd})
            .then(result=>{
                console.log(result.data)
                this.msg = result.data.msg
            })
            .catch(err=>{
                console.log(err)
            })
        },
        register(){
            this.$axios.post(this.HOST+'/api/register',{username:this.username,password:this.pwd})
            .then(result=>{
                console.log(result.data)
                this.msg = result.data.msg
            }).catch(err=>{
                console.log(err)
            })
        }
    }
}
</script>

8.main.js

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import VueResource from 'vue-resource'
import axios from 'axios'

Vue.prototype.HOST = 'http://localhost:4000'
Vue.config.productionTip = false
Vue.prototype.$axios = axios;

/* eslint-disable no-new */
new Vue({
    el: '#app',
    router,
    components: { App },
    template: '<App/>'
})

9.打开命令行窗口,运行如下命令,注意不同命令运行的路径,
在这里插入图片描述
注意:每次对server文件夹中的内容改动,都要重新执行下面的代码

node app.js

在这里插入图片描述

npm run dev

10.最后效果展示
在这里插入图片描述

挺简陋的,花了一天总算前后端打通了,想要源码的加微信发给你,另附微信:Y17744650906 无偿
觉着不错,有帮助的,点个赞再走,有什么问题欢迎指正
另外需要尚硅谷 八斗学院 奈学教育完整大数据资料和多家机构面试题的加 资料来之不易,不能接受小额有偿的勿扰,谢谢

  • 41
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
实现登录注册功能,首先需要有后端 API 接口处理登录注册的逻辑。这里以一个简单的 Node.js Express 后端服务为例,前端使用 Vue3 实现。 1. 创建Vue3项目 ``` vue create login-register ``` 2. 安装 axios ``` npm install axios ``` 3. 创建登录注册组件 在 src/components 目录下创建 Login.vue 和 Register.vue 组件。 Login.vue: ```html <template> <div> <h2>登录</h2> <form @submit.prevent="login"> <label> 用户名: <input type="text" v-model="username" /> </label> <label> 密码: <input type="password" v-model="password" /> </label> <button type="submit">登录</button> </form> </div> </template> <script> import axios from "axios"; export default { name: "Login", data() { return { username: "", password: "", }; }, methods: { async login() { try { const response = await axios.post("/api/login", { username: this.username, password: this.password, }); console.log(response.data); } catch (error) { console.error(error); } }, }, }; </script> ``` Register.vue: ```html <template> <div> <h2>注册</h2> <form @submit.prevent="register"> <label> 用户名: <input type="text" v-model="username" /> </label> <label> 密码: <input type="password" v-model="password" /> </label> <button type="submit">注册</button> </form> </div> </template> <script> import axios from "axios"; export default { name: "Register", data() { return { username: "", password: "", }; }, methods: { async register() { try { const response = await axios.post("/api/register", { username: this.username, password: this.password, }); console.log(response.data); } catch (error) { console.error(error); } }, }, }; </script> ``` 4. 创建路由 在 src/router 目录下创建 index.js 文件,添加登录注册路由。 ```javascript import { createRouter, createWebHistory } from "vue-router"; import Login from "../components/Login.vue"; import Register from "../components/Register.vue"; const routes = [ { path: "/login", name: "Login", component: Login, }, { path: "/register", name: "Register", component: Register, }, ]; const router = createRouter({ history: createWebHistory(), routes, }); export default router; ``` 5. 编写后端 API 在后端创建路由处理登录注册请求。这里使用了 Express 和 MongoDB。 ```javascript const express = require("express"); const bodyParser = require("body-parser"); const mongoose = require("mongoose"); const app = express(); app.use(bodyParser.json()); // 连接MongoDB数据库 mongoose .connect("mongodb://localhost/login-register", { useNewUrlParser: true, useUnifiedTopology: true, }) .then(() => { console.log("Connected to MongoDB"); }) .catch((error) => { console.error(error); }); // 定义用户模型 const User = mongoose.model( "User", new mongoose.Schema({ username: String, password: String, }) ); // 处理登录请求 app.post("/api/login", async (req, res) => { const { username, password } = req.body; const user = await User.findOne({ username, password }); if (!user) { return res.status(401).send({ error: "用户名或密码错误", }); } res.send({ message: "登录成功", }); }); // 处理注册请求 app.post("/api/register", async (req, res) => { const { username, password } = req.body; const existingUser = await User.findOne({ username }); if (existingUser) { return res.status(409).send({ error: "用户名已存在", }); } const user = new User({ username, password }); await user.save(); res.send({ message: "注册成功", }); }); app.listen(3000, () => { console.log("Server is running on port 3000"); }); ``` 6. 修改 App.vue 在 App.vue 中添加链接到登录注册页面的按钮。 ```html <template> <div class="container"> <h1>Vue3登录注册示例</h1> <div> <router-link to="/login">登录</router-link> <router-link to="/register">注册</router-link> </div> <router-view /> </div> </template> <script> export default { name: "App", }; </script> ``` 7. 运行项目 在前端项目根目录下运行以下命令启动前端: ``` npm run serve ``` 在后端项目根目录下运行以下命令启动后端: ``` node index.js ``` 然后访问 http://localhost:8080 即可看到登录注册页面。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

坏孩子充电自习室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值