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

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

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

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

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

3、好了,该创建用于测试的数据库了。
(1)创建一个名字为text的数据库:之后在里面创建一个user二维表:vue+node.js+express+axios实现连接mysql数据库(前后端分离,详细版)_第1张图片
(2)二维表的内容为了方便测试,只有两列:
vue+node.js+express+axios实现连接mysql数据库(前后端分离,详细版)_第2张图片

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

vue+node.js+express+axios实现连接mysql数据库(前后端分离,详细版)_第5张图片
<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文件:
vue+node.js+express+axios实现连接mysql数据库(前后端分离,详细版)_第6张图片
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、好了,恭喜你,成功了!接下来测试以下,以我的为例:
测试前的数据库:
vue+node.js+express+axios实现连接mysql数据库(前后端分离,详细版)_第7张图片
接下来的步骤很重要!!!
首先,你要运行配置数据库的入口文件,在我这里,就是得先运行sever下的index.js文件:
在终端,在app/server目录下,输入以下命令:node index.js
在这里插入图片描述
就成功启动连接数据库了!
之后,你再运行vue入口文件,就能测试了!

npm run serve
vue+node.js+express+axios实现连接mysql数据库(前后端分离,详细版)_第8张图片
打开控制台:添加数据点击提交,再点击查询之后,点开data,能看到:
vue+node.js+express+axios实现连接mysql数据库(前后端分离,详细版)_第9张图片
从数据库刷新,你也能看到:
vue+node.js+express+axios实现连接mysql数据库(前后端分离,详细版)_第10张图片
好了,重要的事再说一下,以上的关键步骤,记得要先运行server下的index.js(后端接口),再运行vue项目(前端app)!

你可能感兴趣的:(原创文章,javascript,vue.js,html,node.js,npm)