【前后端分离练习】nodejs+Vue+mysql实现图书管理系统

591 阅读1分钟

陈述

前端采用Vue进行数据显示 后端采用NodeJs进行逻辑处理,传递数据 数据库使用mysql

功能

  • 实现了增加图书
  • 修改图书
  • 查询图书
  • 删除图书
  • 模糊查询

效果展示

在这里插入图片描述 可增加、可删除、可修改、可模糊查询...由于不能放视频,只能展示个页面

功能实现

前端

代码处都写了注释,我就不一一解释了...

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>图书管理</title>
    <script src="./js/jquery-1.10.2.js"></script>
    <script src="./js/vue@2.6.14.js"></script>
    <style type="text/css">
        .grid {
          margin: auto;
          width: 500px;
          text-align: center;
        }
        .grid table {
          width: 100%;
          border-collapse: collapse;
        }
        .grid th,td {
          padding: 10;
          border: 1px dashed orange;
          height: 35px;
          line-height: 35px;
        }
        .grid th {
          background-color: orange;
        }
        .grid .book{
            padding-bottom: 10px;
            padding-top: 5px;
            background-color: aquamarine;
        }
        button{
            background: rgb(6, 14, 131);
            color: pink;
        }
    </style>    
</head>
<body>
    <div id="app">
        <div class="grid">
            <div>
                <h1>图书管理</h1>
                <div class="book">
                  <div>
                    <label for="id">
                      编号:
                    </label>
                    <input type="text" id="id" v-model.number='id'>
                    <label for="name">
                      名称:
                    </label>
                    <input type="text" id="name" v-model='name'>
                    <button @click='addbook'>提交</button>
                  </div>
                </div>
            </div>
            查询:<input type="text" v-model="findname" @input='findbook'>
            <table>
                <tr>
                    <th>编号</th>
                    <th>名称</th>
                    <th>时间</th>
                    <th>操作</th>
                </tr>
                <tr :key="shu.id" v-for="shu,i in findbooksbyName">
                    <td v-text="shu.id"></td>
                    <td v-text="shu.name"></td>
                    <td v-text="shu.date"></td>
                    <td><a href="#" @click.prevent="update(shu.id)">修改</a>|<a href="#" @click.prevent="delbyid(shu.id)">删除</a></td>
                </tr>
            </table>
        </div>
    </div>
</body>
<script>
    var vm=new Vue({
        el:"#app",
        data:{
            books:[],
            findbooksbyName:[],
            id:'',
            name:'',
            flag:false,//是否编辑
            findname:''
        },
        methods:{
            addbook(){
                if(this.flag){  //修改
                    //根据当前id去更新对应的id数据
                    this.books.some(item=>{
                        if(item.id==this.id){
                            item.name=this.name;
                            return true;
                        }
                    });
                    $.ajax({
                            type:"GET",
                            url:"http://127.0.0.1:9090/updatebook",
                            data:{
                              id:this.id,
                              name:this.name
                            },
                            success:function(data){
                                alert('修改成功')
                            }
                    })
                    this.id='';
                    this.name='';
                    this.flag=false;
                }else{
                    if(this.id==''||this.name==''){
                    alert("不能为空")    
                    }else{
                        let book={
                            id:this.id,
                            name:this.name,
                            date:''
                        }
                        this.books.push(book);
                        $.ajax({
                            type:"GET",
                            url:"http://127.0.0.1:9090/addbook",
                            data:{
                              id:this.id,
                              name:this.name
                            },
                            success:function(data){
                                alert('添加成功');
                                location.reload();
                            }
                        })
                        this.id+=1;
                        this.name='';
                    }
                }
            },
            update(id){
                this.flag=true;//进入编辑
                //数组新方法寻找元素-->filter
                let book=this.books.filter(item=>{
                    return item.id==id;
                })
                console.log(book[0]);
                this.id=book[0].id;
                this.name=book[0].name;
            },
            //方案一(根据下标删)
            /*
            delbyindex(index){
                this.books.splice(index,1);
            }
            */
           //方案二(根据id删)
            delbyid(id){
                let book=this.books.filter(item=>{
                    return item.id!=id; //返回除了要删除的id
                });
                $.ajax({
                            type:"GET",
                            url:"http://127.0.0.1:9090/delbook",
                            data:{
                              id:id
                            },
                            success:function(data){
                                alert('删除成功');
                                location.reload();
                            }
                })
                // this.books=book;
            },
            findbook(){
                let findbooks=this.books.filter(item=>{
                    if(this.findname==''){
                        return item.id!=0;
                    }else{
                    return item.name.includes(this.findname);//includes包含
                    }
                })
                // console.log(findbooks);
                this.findbooksbyName=[];
                for(var i=0;i<findbooks.length;i++){
                    var obj={
                        id: findbooks[i].id,
                        name: findbooks[i].name,
                        date: findbooks[i].date
                    }
                    this.findbooksbyName.push(obj);
                }
            }
        }
    })
    $(function(){
        $.ajax({
                type:"GET",
                url:"http://127.0.0.1:9090/getbooks",
                success:function(data){
                    for(var i=0;i<data.length;i++){
                        vm.books.push(data[i]);
                        vm.findbooksbyName.push(data[i]);
                    }
                },
                error:function(data){
                    alert("服务器异常....")
                }
        })
    })
</script>
</html>

后端

项目结构: 在这里插入图片描述 router.js

var express=require('express');
var conn=require('../mysql.js');
//建立一个路由容器
var router=express.Router();
router.get("/getbooks",(req,res)=>{
    var sql="select * from books";
    conn.query(sql,(err,result,fields)=>{
        if(err){
            return "失败";
        }
        console.log(result);
        res.send(result);
    })
});
router.get("/updatebook",(req,res)=>{
    let id=req.query.id;
    let name=req.query.name;
    console.log("id="+id);
    console.log("name="+name);
    conn.query("update books set name=? where id=?",[name,id],(err,result)=>{
        if(err){
            return "失败";
        }
        console.log(result);
        res.send(result);
    })
})

router.get("/delbook",(req,res)=>{
    let id=req.query.id;
    console.log("id="+id);
    conn.query("delete from books where id=?",[id],(err,result)=>{
        if(err){
            return "失败";
        }
        console.log(result);
        res.send(result);
    })
})

router.get("/addbook",(req,res)=>{
    let id=req.query.id;
    let name=req.query.name;
    console.log("id="+id);
    conn.query("insert into books(id,name) values(?,?)",[id,name],(err,result)=>{
        if(err){
            return "失败";
        }
        console.log(result);
        res.send(result);
    })
})
//导出
module.exports=router;

mysql.js

var mysql=require("mysql");
//创建连接
var conn=mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : 'root',
    database: 'db8'//数据库名称
});
conn.connect();//开启连接
//导出
module.exports=conn;

app.js

var express=require('express');
var router=require('./router/router.js')
//2、创建web服务器  app接收
var app=express();
app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By",'3.2.1')
    res.header("Content-Type", "application/json;charset=utf-8");
    next();//执行下一个中间件
    });
//路由已经放到routes.js中
app.use(router);//使用
//4、启动服务listen(端口号,回调函数)
app.listen(9090,()=>{
    console.log('服务器开启 http://127.0.0.1:9090');
})

数据库

在这里插入图片描述 OK,这样就实现了...😄