vue3项目实战中的接口调用方法(二)fetch用法 (前后端交互) get请求/post请求/put请求/delete请求

🔥点击进入vue专栏🔥

上期推文中讲述了vue3项目实战中接口调用的方法(一)🔥点击即可复习🔥,介绍了async/await调用接口的过程和方法
从本期文章开始将会不定时更新 vue3项目实战中接口调用的三大方法。👏👏👏本期文章将重点介绍vue3的 fetch方法实现请求接口
(👏👏👏欢迎大佬们多多指教!)

fetch概述

基本特性

  • fetch是传统ajax的升级版本,并不是对ajax的进一步封装,是原生js
  • fetch是新的ajax解决方案,fetch会返回Promise
  • 更加简单的数据获取方式,功能更强大,更灵活,可以看作是XMLHttpRequest的升级版。
  • fetch(url,options).then()

🔥语法结构

fetch(url).then(fn2)
		 .then(fn3)
		 ...
		 .then(fn)

示例:
在这里插入图片描述源码:

<script type="text/javascript">
    // Fetch API 基本用法 fetch(url).then() 第一个参数请求的路径
    // Fetch会返回Promise 所以我们可以使用then 拿到请求成功的结果
    fetch('http://localhost:3000/fdata').then(function(data){
        // text()方法属于fetchAPI的一部分,它返回一个Promise实例对象,
        // 用于获取后台返回的数据 return data.text();
        return data.text();
    }).then(function (data) {
        // 在这个then里面我们能拿到最终的数据
        console.log(data);
    })
</script>

fetch基本用法

  • 第一个.then接收到的是Promise数据集
  • 需要被.then处理才可以看到我们最终想要的数据。

基本写法:

fetch('/abc').then(data=>{
    return data.text();
}).then(ret=>{
    // 【注意】这里得到的才是最终的数据
    console
});

示例:
在这里插入图片描述
源码:

// 客户端请求
<body>
  <script type="text/javascript">
    //Fetch API 基本用法
    fetch('http://localhost:3000/fdata').then(function(data){
      // text()方法属于fetchAPI的一部分 它返回一个Promise实例对象 用于获取后台返回的数据
      return data.text();
    }).then(function(data){
      console.log(data);
    })
  </script>
</body>

// 服务器响应
app.get('/fdata', (req, res) => {
  res.send('Hello Fetch!')
})

控制台显示:
在这里插入图片描述

fetch的HTTP请求🔥🔥

常用配置选项

  • method(String):HTTP请求方法,默认为GET HTTP提供了很多方法(GET、DELETE、POST、PUT
  • body(String):HTTP请求参数
  • headers(Object):HTTP的请求头,默认为{}
  • fetch(url, options).then()
  • 需要在options对象中,指定对应的methodmethod:请求使用的方法。
  • post和普通请求的时候,需要在options中设置请求头headersbody

get请求🔥

way1:传统的URL传递参数
在这里插入图片描述
源码:(含详细注释

// 客户端请求
<body>
  <script type="text/javascript">
  // GET参数传递-传统URL 通过URL ? 的形式传参
    fetch('http://localhost:3000/books?id=123', {
      method: 'get' // 当请求方式为get时 可以省略不写 因为请求方式默认为get
    })
      .then(function(data){
      // 返回一个Promise实例对象 用于获取后台返回的数据
        return data.text();
      }).then(function(data){
      // 在这个then里面我们能够拿到最终的数据
        console.log(data)
      });
  </script>
</body>

// 服务器响应
app.get('/books', (req, res) => {
  res.send('传统的URL传递参数!' + req.query.id)
})

控制台结果:
在这里插入图片描述

way2:restful形式的URL
在这里插入图片描述
源码:

// 客户端请求
<body>
  <script type="text/javascript">
  // GET参数传递  restful形式的URL 通过/ 的形式传递参数 即 id = 456 和 id的后台配置有关
    fetch('http://localhost:3000/books/456', {
      method: 'get' // 默认get请求 可以不写
    })
      .then(function (data) {
        return data.text();
      }).then(function (data) {
        console.log(data)
      });
  </script>
</body>

// 服务器响应
app.get('/books/:id', (req, res) => {
  res.send('Restful形式的URL传递参数!' + req.params.id)
})

控制台结果:
在这里插入图片描述

delete请求

示例一:
在这里插入图片描述
源码:(含详细注释

// 客户端请求
<body>
  <script type="text/javascript">
    // DELETE请求方式参数传递 删除id 是 id = 789
    fetch('http://localhost:3000/books/789', {
      method: 'delete' // delete非默认方法 不可省略
    })
      .then(function (data) {
        return data.text();
      }).then(function (data) {
        console.log(data)
      });
  </script>
</body>

// 服务器响应
app.delete('/books/:id', (req, res) => {
  res.send('DELETE请求传递参数!' + req.params.id)
})

控制台结果:
在这里插入图片描述

post请求🔥

  • body用于向后台传递数据
  • headers请求头需要配置content-type内容类型(后面的值是固定的),才可以传过去

way1 传递的是传统格式的参数
示例:
在这里插入图片描述
源码:

// 客户端请求
<body>
  <script type="text/javascript">
    // POST请求传参
    fetch('http://localhost:3000/books', {
      method: 'post', // post方法非默认 不可省略
      body: 'uname=lisi&pwd=123', // 传递数据
      headers: { // 设置请求头
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    })
      .then(function (data) {
        return data.text();
      }).then(function (data) {
        console.log(data)
      });
  </script>
</body>

// 服务器响应
app.post('/books', (req, res) => {
  res.send('POST请求传递参数!' + req.body.uname + '---' + req.body.pwd)
})

控制台结果:
在这里插入图片描述

way2: 传递的是json的参数
在这里插入图片描述
源码:

// 客户端请求
<body>
  <script type="text/javascript">
    // POST请求传参
    fetch('http://localhost:3000/books', {
      method: 'post',
      body: JSON.stringify({ // json格式的参数uname pwd
        uname: '张三',
        pwd: '456'
      }),
      headers: {
        'Content-Type': 'application/json'
      }
    })
      .then(function (data) {
        return data.text();
      }).then(function (data) {
        console.log(data)
      });
  </script>
</body>

// 服务器响应
app.post('/books', (req, res) => {
  res.send('POST请求传递参数!' + req.body.uname + '---' + req.body.pwd)
})

控制台结果:
在这里插入图片描述
在这里插入图片描述

put请求方式🔥

  • put请求方式的参数传递:一般提交的数据,用于修改原有数据
  • put也支持第一种,传递传统表单text形式的参数
  • json格式需要后台提供支撑

示例:
在这里插入图片描述

源码:

// 客户端请求
<body>
  <script type="text/javascript">
    // PUT请求传参 修改id 是 123 的
    fetch('http://localhost:3000/books/123', {
      method: 'put',
      body: JSON.stringify({
        uname: '张三',
        pwd: '789'
      }),
      headers: {
        'Content-Type': 'application/json'
      }
    })
      .then(function (data) {
        return data.text();
      }).then(function (data) {
        console.log(data)
      });
  </script>
</body>

//服务器响应
app.put('/books/:id', (req, res) => {
  res.send('PUT请求传递参数!' + req.params.id + '---' + req.body.uname + '---' + req.body.pwd)

控制台结果:
在这里插入图片描述

fetch响应结果/格式

  • text():将返回体处理成字符串类型
  • json():返回结果和JSON.parse(responseText)一样

🔥text数据格式
在这里插入图片描述
控制台结果:
在这里插入图片描述
由于data为字符串类型的数据,无法直接访问该属性的值。
修改方式如下:👇👇👇

1.使用JSON.parse()把字符串转化成对象
var obj = JSON.parse(data)
2.使用 obj.属性名 得到属性值
console.log(obj.uname)

在这里插入图片描述

🔥json数据格式

//客户端请求
<body>
  <script type="text/javascript">
    //Fetch响应json数据格式
    fetch('http://localhost:3000/json').then(function(data){
      return data.json();
    }).then(function(data){
      console.log(data.uname)
    })
  </script>
</body>

//服务器响应
app.get('/json', (req, res) => {
  res.json({
    uname: 'lisi',
    age: 13,
    gender: 'male'
  });
})

返回的data是object对象 可以直接获取对象中属性的值(data.属性名

在这里插入图片描述
在这里插入图片描述

summary

以上就是关于vue3项目实战中调用接口的方法(二)fetch的全部内容。
fetch虽没有现在流行的async await用起来方便简单,但是在接口调用中仍然占据重要方法的地位。
(后期将会对最后一个方法axios进行讲述,完结vue的接口调用方法)

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Vue的数据驱动---mvvm模式的介绍 Vue是一款轻量级的渐进式前端框架,主要功能: 1、模板渲染/数据同步 2、组件化、模块化 3、扩展功能:路由 等等 Vue资源: 文官网:https://cn.vuejs.org/ Github源码:https://github.com/vuejs/vue MVVM: M:Model数据模型 负责数据存储 V:View视图 负责页面的显示 VM:View Model负责业务处理,对数据进行加工,之后交给视图 Vue1 下载地址:http://v1-cn.vuejs.org/js/vue.js Vue2 下载地址:https://unpkg.com/vue@2.2.1/dist/vue.js 三、Vue常见指令介绍上 1、插值表达式 {{}} 当模型的数据发生改变时,那么视图的数据也对应的发生改变。 2、v-text 将一个变量的值渲染到指定的元素 3、v-html 可以真正输出html元素 4、v-model 实现双向数据绑定 5、v-build 绑定页面元素的属性 6、v-if和v-show v-if 作用:判断是否加载固定的内容,如果是真,就加载,如果是假,就不加载; 语法:v-if='判断表达式' v-show 作用:判断是否显示内容 语法:v-show='判断表达式' v-if和v-show的相同点和不同点 1.相同点:都可以实现对于一个元素的显示与隐藏操作 2.不同点:v-if是将元素添加或移出dom树模型,v-show只是在这个属性上添加display:none而已。 3.v-if有更高的切换小号,安全性高。v-show初始化消耗大点。所以,如果需要频繁切换并对安全性没有要求时, 可以用v-show。如果在运行时,条件不可能改变的话,使用v-if更好点。 7、v-for 作用:控制html元素的循环 语法:v-for="item in 集合" 8、v-on 作用:对页面的事件进行绑定 语法:v-on:事件类型 = '监听器' 缩写@事件类型='监听器' 四、Vue常用的组件使用 组件是vue.js一个非常强大的功能,可以扩展HTML元素,封装可重用的代码。 1、将组件内容定义到template模板 2、组件实现指令以及事件绑定 五、组件间的传值 1、父组件传值给子组件 2、子组件传值给父组件 六、Vue-router路由的基本使用上 在一个系统或App,由多个页面组成,通常会使用vue的组件来实现,那么从一个页面跳转到另一个页面时, 通过url路径来实现的,哪个url对应哪个页面,在vue是通过vue-router来实现 Vue-router在vue2.0的使用、 配合vue1.0使用的版本的帮助文档地址: https://github.com/vuejs/vue-router/tree/1.0/docs/zh-cn 配合vue1.0使用的vue-router下载地址: https://cdnjs.doubflare.com/ajax/libs/vue-router/0.7.10/vue-router.min.js 配合vue2.0使用的版本的帮助文档地址:http://router.vuejs.org/zh-cn/installation.html 配合vue2.0使用的vue-router下载地址:https://unpkg.com/vue-router/dist/vue-router.js 七、路由的传值 vue2.0的路由参数定义实现url的传值 八、ECMAScript6 九、let使用 let是申明变量的关键字 1、在相同的作用域内,let不能重复申明一个变量 2、let申明的变量不会被预解析 3、暂时性死区(变量在let声明前都不能访问,为了防止先调用后声明这个现象) 十、let与for的使用 1.块级作用域 let声明的变量拥有块级作用域,块级作用域是一对大括号 块级作用域可以直接些一堆大括号,以后就不用写自执行函数了 2.var与for循环 3.let与for循环 十一、const的用法 const声明一个常量,一旦声明后就不能修改了 1.如果声明后再去修改的话就会报错 2.只声明不赋值也会报错 3.只能先声明后使用,不会被提前解析 4.不能重复声明一个常量 注意:const声明的对象属性是可以修改的 十、结构赋值-数组 结构赋值 按照一定的模式,从数组或者对象把数据拿出来,对变量进行赋值 数组结构赋值 等号左边与右边必须都是数组,数组的结构赋值要一一对应。如果对应不上的话就是undefind 十三、对象结构赋值 对象结构赋值 等号左边与右边必须都是对象,名字要一一对应,顺序不需要对应,对应不上的值结果是undefind 十四、字符串模板 1.字符串需要用一堆反引号包裹起来,它可以定义多行字符串,只用一堆反引号 2.要拼进去的数据需要放在${}里面 3.大括号里面还可以进行运算 4.大括号里面可以调用函数 十五、箭头函数 语法: 1.function用var、let、const来表示 2.参数要卸载第一个等号后面 a.如果没有参数,需要写一堆空的小括号 b.只有一个参数,那就直接写,不用加括号 c.参数有多个,需要加一个小括号,参数用逗号隔开 3.函数的主题内容是放箭头后面, 如果语句只有一条,那就直接写; 如果语句有多条,需要把他们放在一堆大括号里 。 十六、rest参数 rest参数 ...变量名 rest参数是一个数组,他的后面不能再有参数,不然会报错 扩展方法... 1.三个点后面是一个类数组,它的作用是把这个类数组转成真正的数组,但是它需要放到一对括号里面 2.三个点后面是一个真正的数组,它的作用是把数组转成一个普通集合数据,不需要加括号 十七、Symbol介绍 新增的第7数据类型,表示独一无。用来作为属性名,能保证不会与其他的属性名冲突 1.它是通过Symbol函数生成的 2.它的前面不能用new,因为它生成的是一个原始类型的数据,不是对象 3.它可以接受一个参数,为了便于区别。及时长的一样他们也不同 4.它不能与其他的值进行运算,没有隐式转换 5.它的值可以被转换成布尔值或字符串,不能转换成数字 十八、set数据结构 set数据结构,类似数组,所有的数据都是唯一的,没有重复的值。它本身是一个构造函数 size数据长度 add()添加一个数据 delete()删除一个数据 has()查找某条数据,返回一个布尔值 clear()删除所有数据 十九、map数据结构 map数据结构,类似于对象。键值对的集合,所有输一局都是唯一的,不会重复。每条数据都需要放在一个数组 它本身就是一个构造函数 size()数据的长度 set()添加一条数据 delete()删除一条数据 get()获取一条数据 has()查找某条数据,返回一个布尔值 clear()删除所有数据 十:教学视频

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dorable_Wander

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值