Vue前后端交互实现图书管理功能

源码链接:https://pan.baidu.com/s/1MzN9Jcrz-OLv7GVklK7UXQ
提取码:36qe

初始化项目:

npm init -y

安装相应的第三方模块:

npm install express --save
npm install body-parser --save

案例效果

在这里插入图片描述

案例分析

把图书管理的各个功能都封装成一个模块,并开放出去。
每一个路由对应一个模块。
在前端(.html)文件中,要实现某个功能,

  1. 通过请求路径去请求相应的路由,
  2. 由路由找到开放出来的功能模块
请求路由请求方式请求路由请求的模块
① 图书列表数据加载GEThttp://localhost:3000/books获取图书列表数据
② 添加图书POSThttp://localhost:3000/books添加图书保存数据
③ 验证图书名称是否存在GEThttp://localhost:3000/books/book/:name验证图书名称是否存在
④ 编辑图书-根据ID查询图书信息GEThttp://localhost:3000/books/:id跳转编辑图书页面
⑤ 编辑图书-提交图书信息PUThttp://localhost:3000/books/:id编辑图书更新数据
⑥ 删除图书DELETEhttp://localhost:3000/books/:id删除图书信息

接口文档:

基准路径:http://localhost:3000/

// 设置基准URL
    axios.defaults.baseURL='http://localhost:3000';
获取图书列表数据
  • 路径:books
  • 请求方式:get
  • 请求参数:无
  • 响应结果
[{
  "id": "4",
  "name": "红楼梦",
  "date": 2525609975000
}, {
  "name": "三国演义",
  "date": 2525609975000,
  "id": 5
}, {
  "name": "水浒传",
  "date": 2525609975000,
  "id": 6
}, {
  "name": "西游记",
  "date": 2525609975000,
  "id": 7
}]
添加图书-提交图书信息
  • 路径:books
  • 请求方式:post
  • 请求参数
    • name:图书名称
  • 响应结果
{
    "status": 200  // (200表示成功;500表示失败)
}
编辑图书-根据ID查询图书信息
  • 路径:books/:id
  • 请求方式:get
  • 请求参数:无
  • 响应结果
{
    "name": "西游记",
    "date": 2525609975000,
    "id": 7
}
编辑图书-提交图书信息
  • 路径:books/:id
  • 请求方式:put
  • 请求参数
    • name:图书名称
  • 响应结果
{
    "status": 200  // (200表示成功;500表示失败)
}
删除图书信息
  • 路径:books/:id
  • 请求方式:delete
  • 请求参数:无
  • 响应结果
{
    "status": 200  // (200表示成功;500表示失败)
}
验证图书名称是否存在
  • 路径:books/book/:name
  • 请求方式:get
  • 请求参数:无
  • 响应结果
{
    "status": 1 // (1表示存在;2表示不存在)
}

调用各个功能

获取图书列表数据

路径:books
请求方式:get
获取图书列表数据 - 将假数据换成接口形式有3种方法

  • 方法1 ~ Promise方法
// 缓存this
 var that =this;
// 接口 可以查询列表
                axios.get('books').then(function(data){
     // console.log(data.data)
     that.books=data.data;
}) 
  • 方法2 - Promise方法(箭头函数)
// Promise方法
// 箭头函数可以不缓存this指针
axios.get('books').then((data) => {
    // console.log(data.data)
    this.books=data.data;
})
  • 方法3 ~ async/await接口方法
    方法:
    在Vue实例的methods中编写queryData方法
queryData:async function(){
// 调用后台接口获取图书列表数据
var ret =await axios.get('books');
this.books=ret.data
}

在Vue实例的mounted中调用queryData方法
调用:

//  async/await接口方法
// 调用后台接口获取图书列表数据  的  方法
this.queryData();
  • 方法4 ~ 响应拦截器
    在Vue的实例中编写:
queryData:async function(){
    // 调用后台接口获取图书列表数据
    this.books = await axios.get('books')
}

相应拦截器:
响应到数据

// 参数 res  -  响应对象
axios.interceptors.response.use(function(res){
    return res.data;
},function(error){
    console.log(error)
})
添加和编辑

1.将id设置为不可输入
disabled用来控制input是否可以输入。
值为true可以输入
值为false是不可以输入
2. 给添加和编辑图书设置端口
请求【添加图书】的路由

handle: async function () {
if (this.flag) {
    // 编辑操作
    var ret = await axios.put('books/' + this.id,{
        name: this.name
    })
    if (ret.status == 200){
        // 重新加载列表数据
        this.queryData();
    }
    this.flag = false;
} else {
    // 添加图书
    var ret = await axios.post('books',{
        name: this.name
    })

    if (ret.status == 200) {
        // 重新加载列表数据
        this.queryData();
    }
    

}
验证图书名称是否存在
// 侦听器
 watch: {
     name: async function (val) {
         // 验证图书名称是否已经存在
         // var flag = this.books.some(function (item) { return item.name == val; })
         // 调用验证图书名称的接口
         var ret=await axios.get('books/book/'+this.name);
         if (ret.status==1) {
             // 图书名存在
             this.submitFlag = true
         } else {
             // 图书名不存在
             this.submitFlag = false
         }
     }

 }
编辑图书- 根据Id查询图书信息 / 提交图书信息

查询图书信息

toEdit: async function (id) {
                    // falg状态位用于区分编辑和添加操作
                    this.flag = true;
                    // 根据id查询出对应的图书信息
                    var ret = await axios.get('books/' + id);
                    this.id = ret.id;
                    this.name = ret.name;
                },

编辑图书信息:

if (this.flag) {
   // 编辑操作
   var ret = await axios.put('books/' + this.id,{
       name: this.name
   })
   if (ret.status == 200){
       // 重新加载列表数据
       this.queryData();
   }
   this.flag = false;
}
删除图书
deleteBook: async function (id) {
   // 删除图书
   var ret = await axios.delete('books/' + id);
   if(ret.status == 200) {
       // 重新加载列表数据
       this.queryData();
   }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值