vue+node.js+express+axios实现连接mysql数据库(前后端分离,详细版)

这两个星期都在学vue技术,感觉真的是博大精深啊!
今天,我给大家总结了用axios连接数据库的步骤,让大家少走弯路(不像我,我用axios连了两天才连接成功。。。)

1、首先,确保你已经有了以下环境:

(1). node.js
(2).mysql数据库已经下载好

2、好了,接下来,你应该用vue-cli脚手架创建你的vue项目。
代码是:vue create app 或者你也可以在终端输入:vue ui用图形界面创建你的vue项目
(我假装你都已经懂了哈!不懂的你快去学vue入门!!)

3、好了,该创建用于测试的数据库了。
(1)创建一个名字为text的数据库:之后在里面创建一个user二维表:在这里插入图片描述
(2)二维表的内容为了方便测试,只有两列:
在这里插入图片描述

4、好了,有了数据库,该进入vue的工程了。(我用vs Code编辑器)
(1)先看文件的目录,如果你第二步没问题,那就没问题。
在这里插入图片描述
(2)安装依赖。
我们连接mysql数据库,需要用到的依赖有:express、mysql和axios
安装他们,你应该在根目录下(这里,我安装在app目录下)
安装express:npm install express mysql body-parser(这里只要这个就行了)
安装axios:npm install axios
安装mysql:npm install mysql
你若没问题,我们打开package.json应该有如下条项:
在这里插入图片描述
(3)好了,完美!就该编码连接数据库了!首先,你得在根目录(这里在app下)建立server文件夹。里面关系及文件如下:

在这里插入图片描述
<1>在api文件夹下,建立userApi.js文件,里面的代码如下:

//api路由
//userApi.js —— 测试用 API 示例

var models = require('../db');
var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var $sql = require('../sqlMap');
// 连接数据库
var conn = mysql.createConnection(models.mysql);
conn.connect();
var jsonWrite = function (res, ret) {
    if (typeof ret === 'undefined') {
        res.json({
            code: '1', msg: '操作失败'
        });
    }
    else {
        res.json(
            ret
        );
    }
};
// 增加用户接口
router.post('/addUser', (req, res) => {
    var sql = $sql.user.add;
    var params = req.body;
    console.log(params);
    conn.query(sql, [params.username, params.password], function (err, result) {
        if (err) {
            console.log(err);
        }
        if (result) {
            jsonWrite(res, result);
        }
    })
});

router.get('/query',(req,res)=>{
    conn.query('select * from user',function(err,row){
        if(err){
             console.log(err)            
        }
        console.log(typeof row)
        let data = JSON.stringify(row)
        res.end(data)
    })
});

module.exports = router;

<2>在server下建立db.js,代码如下:

// 数据库连接配置
//db.js——用来添加 mysql 配置
//根据mysql的IP,端口,用户名,密码,数据库名称自行修改
module.exports = {
    mysql: {
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'text',
    port: '3306'
    }
}
    

<3>
在server下建立index.js,代码如下:

// node 后端服务器
//index.js——Express 服务器入口文件

const userApi = require('./api/userApi')
const fs = require('fs')
const path = require('path')
const bodyParser = require('body-parser')
const express = require('express')
const app = express()

//采用设置所有均可访问的方法解决跨域问题
app.all("*", function (req, res, next) {
    //设置允许跨域的域名,*代表允许任意域名跨域
    res.header("Access-Control-Allow-Origin", "*");
    //允许的header类型
    res.header("Access-Control-Allow-Headers", "content-type");
    //跨域允许的请求方式 
    res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
    if (req.method.toLowerCase() == 'options')
        res.send(200); //让options尝试请求快速结束
    else
        next();
})
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
// 后端api路由

app.use('/api/user', userApi)

// 监听端口
app.listen(3000)
console.log('success listen at port:3000......')

<4>在server下建立sqlMap.js,代码如下:

// sql语句
//sqlMap.js——SQL 语句映射文件,供 API 调用
var sqlMap = {
    user: {
        add: 'insert into user(userName,password) values (?,?)',
    }

}
module.exports = sqlMap


<5>修改前端App.vue文件:
在这里插入图片描述
App.vue代码如下:

<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link>
    </div>

     <h1>{{ msg }}</h1>
    <input v-model="userName" placeholder="请输入姓名" autocomplete>
    <input v-model="password" placeholder="请输入年龄" autocomplete>
    <button v-on:click="addUser">提交</button>

    <p>这是查询按钮</p>
        <p>
            <button @click="changeMsg">点击</button>
        </p>

    <router-view/>
  </div>
</template>

<script>
import axios from 'axios';
export default{
    name: 'Hello',
    data() {
      return {
        msg: 'Welcome to Your Vue.js App',
        userName: '',
        password: ''
      }
    },
    methods: {
      addUser() {
        var name = this.userName;
        var password = this.password;
        axios.post('http://localhost:3000/api/user/addUser', {
          username: name,
          password: password
        }, {}).then((response) => { console.log(response); })
      },
  
      changeMsg () {
        axios.get('http://localhost:3000/api/user/query').then((response) => {
            console.log(response)
            console.log('--------')
        })
      },
    }

}
</script>

<style>

</style>
<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}

#nav {
  padding: 30px;
}

#nav a {
  font-weight: bold;
  color: #2c3e50;
}

#nav a.router-link-exact-active {
  color: #42b983;
}
</style>

5、好了,恭喜你,成功了!接下来测试以下,以我的为例:
测试前的数据库:
在这里插入图片描述
接下来的步骤很重要!!!
首先,你要运行配置数据库的入口文件,在我这里,就是得先运行sever下的index.js文件:
在终端,在app/server目录下,输入以下命令:node index.js
在这里插入图片描述
就成功启动连接数据库了!
之后,你再运行vue入口文件,就能测试了!

npm run serve
在这里插入图片描述
打开控制台:添加数据点击提交,再点击查询之后,点开data,能看到:
在这里插入图片描述
从数据库刷新,你也能看到:
在这里插入图片描述
好了,重要的事再说一下,以上的关键步骤,记得要先运行server下的index.js(后端接口),再运行vue项目(前端app)!

前后端分离是一种开发模式,它将前端和后端的开发分离,前端主要负责用户界面的展示和交互,后端主要负责数据的处理和存储。Vue2、Node.jsMySQL可以结合使用来实现前后端分离。 首先,我们可以使用Vue2作为前端框架,通过它来开发用户界面。Vue2提供了一套响应式的数据绑定和组件化的架构,使得前端开发更加高效和灵活。我们可以使用Vue的官方脚手架工具vue-cli来快速搭建项目的基础结构。 其次,Node.js可以用作后端技术,作为一个基于事件驱动的服务器端JavaScript运行环境,它提供了丰富的模块和工具,使得后端开发更加便捷。我们可以使用Express框架来构建Node.js的后端应用,通过定义路由和处理请求,与前端进行数据的交互。 最后,MySQL是一个开源的关系型数据库管理系统,它可以存储和管理数据。我们可以使用Node.jsmysql库来连接和操作MySQL数据库,通过编写SQL语句来实现数据的增删改查。 在实际开发中,前端通过Ajax或者Axios等工具向后端发送请求,后端接收请求后,通过与MySQL数据库的交互来获取或处理数据,并将结果返回给前端。前端通过Vue2的数据绑定和渲染机制,将后端返回的数据展示在用户界面上。 通过Vue2、Node.jsMySQL的组合,我们可以实现一个完整的前后端分离的应用程序。Vue2提供了优秀的用户界面,Node.js作为后端技术提供了强大的功能和灵活性,MySQL作为数据库管理系统提供了数据的存储和管理。这样的开发模式可以提高开发效率和代码的维护性,同时也能够实现更好的用户体验和性能。
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

乐邂逅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值