vue+express+mysql做一个简单前后端交互,从数据库中读取数据渲染到页面

1.下载上次的包 npm I ,同时下载新的包 axios

2.打开数据库服务器,同时使用新建数据库一样,数据包名

3.新建一个项目

4.全局注册axios

5.新建一个server文件夹(里面在建一个index.js的主文件)用来放我们后端写的东西

6.先写后端数据,我们这里要注意的一点。因为我们前端的端口是8080,而后端的端口是8088那么就会出现跨域问题,因此我们需要用cors在后端解决跨域问题。

先导包,然后使用插件

7.这里我们有一个需求,那就是当访问/user的时候可以从数据库读取数据。这里我们要注意的一点,那就是index.js中的数据要跟数据库中定义的数据相同

8.node index.js跑一下

9.在App.vue 书写前端代码。这里我们又有一个需求,点击一个按钮从数据库中读取数据。再点一个按钮从删除这条记录

10.交互

11.页面展示效果 npm run serve跑一下

12.主要代码展示

/server/index.js

// 引入express模块

var express = require('express')

var cors=require('cors')

var bodyParser = require('body-parser');

var mysql=require('mysql');

//创建express应用

var app = express()

app.use(cors())

app.use(bodyParser.urlencoded({

       extended:true

}))

const db=mysql.createConnection({

       host:'localhost',

       user:"root",

       password:'123456',

       database:'vue'

});

db.connect(function(err){

       if(err) throw err;

       else

              console.log('数据库连接成功');

})

// app.set('view engine','png')

// app.set('views','./views')

app.get('/user',function(req,res){

       var sql='select * from user';

       db.query(sql,function(err,results){

              if(err)

                     console.log(err);

              else {

                     res.send(results)

              }

       })

})

//在8081端口启动服务器

app.listen(8088,function(){

       console.log("服务器启动成功")

})

App.vue

<template>

  <div id="app">

    <button @click="getData">获取数据</button>

       <table border="1" cellpadding="0" align="center">

              <tr bgcolor="antiquewhite"><td>序号</td><td>姓名</td><td>年龄</td><td>操作</td></tr>

              <tr v-for="(c,index) in user">

                     <td>{ {index+1}}</td>

                     <td v-for="(value,key) in c">

                            <nobr>{ {value}}</nobr>

                     </td>

                     <td><input type="checkbox" @change="sle_course(c.name)"/></td>

              </tr>

       </table>

       </div>

</template>

<script>

export default {

  name: 'app',

  data(){

         return{

                user:[{name:'',age:18}]

         }

  },

  methods:{

        getData(){

              this.axios.get('http://127.0.0.1:8088/user').then(

              (res)=>{

                     this.user=res.data

              }

              )  

        },

        sle_course(name){

               for(var i=0;i<this.user.lenght;i++){

                      if(this.user[i].name==name){

                             this.user.splice(i,1)

                             break

                      }

               }

        }

  },

}

</script>

<style>

#app {

  font-family: 'Avenir', Helvetica, Arial, sans-serif;

  -webkit-font-smoothing: antialiased;

  -moz-osx-font-smoothing: grayscale;

  text-align: center;

  color: #2c3e50;

  margin-top: 60px;

}

</style>

Main.js

import Vue from 'vue'

import App from './App.vue'

import axios from 'axios'

Vue.config.productionTip = false

Vue.prototype.axios=axios

new Vue({

  render: h => h(App),

}).$mount('#app')

猜你喜欢

转载自blog.csdn.net/weixin_64612659/article/details/130631931