1.搭建Vue项目
1.在cmd中运行 vue ui,按照自己想要的配置进行搭建
2.在vue项目的根目录下安装axios 和Element UI
| 12
 
 | npm install axios --savenpm i element-ui -S
 
 | 
3.安装完成后,在main.js中引入
| 12
 3
 4
 5
 6
 
 | import axios from 'axios'Vue.prototype.$axios = axios;
 
 import ElementUI from 'element-ui';
 import 'element-ui/lib/theme-chalk/index.css';
 Vue.use(ElementUI);
 
 | 
2.搭建Node.js项目
1.新建一个 server 文件夹,作为项目的根目录,并运行命令
2.安装 express,cors
| 12
 
 | npm i express@4.17.1npm i cors@2.8.5
 
 | 
3.在项目根目录新建 app.js 作为入口文件,并写入如下代码:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | const express = require('express')
 
 const app = express()
 
 const cors = require('cors')
 
 app.use(cors())
 
 app.use(express.urlencoded({exrended:false}))
 
 app.listen('3008',function(){
 console.log('api server running at http://127.0.0.1:3008');
 })
 
 | 
3.在项目根目录,新建 router 文件夹,存放路由模块;新建router_handler文件夹,存放路由处理函数模块
4.在router文件夹中,新建 user.js  文件,作为用户的路由模块,并写入如下代码:
| 12
 3
 4
 5
 6
 
 | const express = require('express')
 
 const router = express.Router()
 
 module.exports = router
 
 | 
5.在 app.js 中导入并使用路由模块
| 12
 3
 
 | const userRouter = require('./router/user')
 app.use('/api',userRouter)
 
 | 
6.在 router_handler 文件夹中,新建 userhandler.js ,作为存放用户路由处理函数模块
3.配置MySQL模块
1.安装mysql模块
2.在 server 文件中 新建 /db/index.js 文件,创建数据库连接对象:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | const mysql = require('mysql')
 
 const db = mysql.createPool({
 host:'127.0.0.1',
 user:'root',
 password:'123456',
 database:'test'
 })
 
 module.exports = db
 
 | 
4.编写接口
1.在 \router_handler\userHeandler.js 中导入 index.js 数据库文件
| 12
 
 | const db = require('../db/index')
 
 | 
2.使用exports对象,编写 路由处理函数
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | exports.getUserInfo = (req, res) => {
 const sql = `select * from t_user`
 db.query(sql,(err,results)=>{
 if (err) {
 res.send({code:201,message:'查询失败'})
 }else{
 res.send({ code: 200, message: '查询成功',data:results})
 }
 })
 }
 
 | 
3.在 \router\user.js 中导入userHandler文件并使用
| 12
 3
 
 | const userHandler = require('../router_handler/userHeandler')
 router.get('/user/list',userHandler.getUserInfo)
 
 | 
4.运行app.js,使用postman调试接口
5.编写其他接口函数
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 | exports.addUserInfo = (req, res) => {
 const data = req.body
 console.log(data);
 const sql = `insert into t_user(u_name,u_email,u_sex,u_province,u_hobby) values('${data.u_name}','${data.u_email}','${data.u_sex}','${data.u_province}','${data.u_hobby}')`
 db.query(sql,(err,results)=>{
 if (err) {
 res.send({code:201,message:'新增失败'})
 }else{
 res.send({ code: 200, message: '新增成功'})
 }
 })
 }
 
 exports.deleteUserInfo = (req, res) => {
 const data = req.body
 console.log(data);
 const sql = `delete from t_user where u_id = '${data.u_id}'`
 db.query(sql,(err,results)=>{
 if (err) {
 res.send({code:201,message:'删除失败'})
 }else{
 res.send({ code: 200, message: '删除成功'})
 }
 })
 }
 
 | 
6.在 \router\user.js 中使用
| 12
 
 | router.post('/user/add',userHandler.addUserInfo)router.post('/user/delete',userHandler.deleteUserInfo)
 
 | 
5.Vue实现页面渲染
1.在 src 文件夹下,新建一个 /api/index.js 和 /api/api.js
2.在 index.js 中导入 axios 并获取后端地址:
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | import axios from 'axios'
 
 const serve = axios.create({
 baseURL:"http://127.0.0.1:3008/api",
 timeout:3000,
 
 })
 export default serve
 
 | 
3.在 api.js 中导入index.js文件,并封装接口
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | import serve from '../api/index'import qs from 'qs'
 
 
 export function getUserInfo() {
 return serve({
 method: 'GET',
 url: '/user/list',
 })
 }
 
 | 
4.在vue文件中使用接口
| 12
 3
 4
 5
 6
 
 | async getUserList(){
 const {data:res} = await getUserInfo()
 if (res.code != 200) return this.$message.error("查询用户失败!");
 this.tableData = res.data
 },
 
 | 
6.Vue页面代码汇总
1.HomeView.js页面代码
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 
 | <template><div class="home">
 <form @submit.prevent="demo" class="home-form">
 <table border="1" cellspacing="0">
 <tr>
 <td>用户名:</td>
 <td><input type="text" v-model="userInfo.u_name" /></td>
 </tr>
 <tr>
 <td>邮箱:</td>
 <td><input type="text" v-model="userInfo.u_email" /></td>
 </tr>
 
 <tr>
 <td>性别:</td>
 <td>
 <input
 type="radio"
 v-model="userInfo.u_sex"
 name="u_sex"
 value="男"
 checked="checked"
 />男
 <input
 type="radio"
 v-model="userInfo.u_sex"
 name="u_sex"
 value="女"
 />女
 <input
 type="radio"
 v-model="userInfo.u_sex"
 name="u_sex"
 value="未知"
 />未知
 </td>
 </tr>
 <tr>
 <td>省份:</td>
 <td>
 <select v-model="userInfo.u_province">
 <option value="湖北省">湖北省</option>
 <option value="上海市">上海市</option>
 <option value="重庆市">重庆市</option>
 <option value="湖南省">湖南省</option>
 </select>
 </td>
 </tr>
 <tr>
 <td>爱好:</td>
 <td>
 <input
 type="checkbox"
 v-model="userInfo.u_hobby"
 value="篮球"
 />篮球
 <input
 type="checkbox"
 v-model="userInfo.u_hobby"
 value="读书"
 />读书
 <input
 type="checkbox"
 v-model="userInfo.u_hobby"
 value="插画"
 />插画
 <input
 type="checkbox"
 v-model="userInfo.u_hobby"
 value="编程"
 />编程
 <input
 type="checkbox"
 v-model="userInfo.u_hobby"
 value="弹琴"
 />弹琴
 </td>
 </tr>
 </table>
 <button>新增</button>
 </form>
 
 <div class="home-box">
 <el-table :data="tableData" border style="width: 100%">
 <el-table-column prop="u_id" label="id">
 </el-table-column>
 <el-table-column prop="u_name" label="用户名" >
 </el-table-column>
 <el-table-column prop="u_email" label="邮箱"> </el-table-column>
 <el-table-column prop="u_sex" label="性别"> </el-table-column>
 <el-table-column prop="u_province" label="省份"> </el-table-column>
 <el-table-column prop="u_hobby" label="爱好"> </el-table-column>
 <el-table-column label="操作">
 <template slot-scope="scope">
 <button @click ="deleteuser(scope.row.u_id)">删除</button>
 </template>
 </el-table-column>
 </el-table>
 </div>
 </div>
 </template>
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 
 | <script>import { getUserInfo,postAddUser,deleteUser} from "../api/api";
 
 export default {
 name: "HomeView",
 data() {
 return {
 userInfo: {
 u_name: "",
 u_email: "",
 u_sex: "",
 u_province: "",
 u_hobby: [],
 },
 tableData:[]
 };
 },
 created(){
 this.getUserList()
 },
 methods: {
 async getUserList(){
 const {data:res} = await getUserInfo()
 if (res.code != 200) return this.$message.error("查询用户失败!");
 this.tableData = res.data
 },
 async demo() {
 
 const {data:res} = await postAddUser(this.userInfo)
 if (res.code != 200) return this.$message.error("新增用户失败!");
 this.getUserList()
 
 },
 async deleteuser(id){
 const confirmResult = await this.$confirm(
 "此操作将删除该用户, 是否继续?",
 "提示",
 {
 confirmButtonText: "确定",
 cancelButtonText: "取消",
 type: "warning",
 }
 ).catch((err) => err);
 if (confirmResult !== "confirm") {
 return this.$message.info("已取消删除");
 }
 const data = {
 u_id : id
 }
 const {data:res} = await deleteUser(data)
 if (res.code != 200) return this.$message.error("删除用户失败!");
 this.getUserList();
 
 },
 },
 };
 </script>
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 
 | <style scoped>.home-form {
 width: 60%;
 margin: 0 auto;
 align-content: center;
 margin-top: 50px;
 }
 .home-form table {
 width: 100%;
 }
 .home-form button {
 display: flex;
 margin-top: 10px;
 }
 .home-box {
 width: 60%;
 margin: 0 auto;
 align-content: center;
 margin-top: 20px;
 }
 .home-box .el-table {
 width: 100%;
 }
 </style>
 
 
 | 
2.api.js代码
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 
 | import serve from '../api/index'import qs from 'qs'
 
 
 export function getUserInfo() {
 return serve({
 method: 'GET',
 url: '/user/list',
 })
 }
 
 export function postAddUser(data) {
 return serve({
 method: 'POST',
 url: '/user/add',
 data:qs.stringify(data)
 })
 }
 
 export function deleteUser(data) {
 console.log(data);
 return serve({
 method: 'POST',
 url: '/user/delete',
 data:qs.stringify(data)
 })
 }
 
 | 
7.效果展示
