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

本文详细介绍Vue3项目中如何使用fetch进行GET、DELETE、POST、PUT请求,包括参数传递、响应处理和常见配置。理解fetch的基本特性和与async/await的区别,是接口调用必备技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🔥点击进入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的接口调用方法)

Vue.js项目中,axios是处理HTTP请求的常用库,可以用来发送GETPOST请求,并且能通过特定配置解决跨域问题。下面提供的是如何使用axios进行GETPOST请求的示例代码,以及如何通过Vue CLI和CORS解决跨域问题的方法。 参考资源链接:[Vue.js与axios数据交互及跨域解决方案](https://wenku.csdn.net/doc/645c973295996c03ac3c635c?spm=1055.2569.3001.10343) 首先,确保已经在项目中安装了axios。可以通过npm或yarn来安装: ```bash npm install axios # 或者 yarn add axios ``` 在Vue组件中使用axios发送GET请求的示例代码如下: ```javascript <template> <div> <!-- 模板内容 --> </div> </template> <script> import axios from &#39;axios&#39;; export default { data() { return { // 数据对象 }; }, methods: { fetchData() { axios.get(&#39;***&#39;, { params: { id: 123 } }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); } }, mounted() { this.fetchData(); } }; </script> ``` 发送POST请求的示例代码: ```javascript export default { methods: { submitData() { axios.post(&#39;***&#39;, { username: &#39;user&#39;, password: &#39;pass&#39; }) .then(response => { console.log(&#39;Success:&#39;, response.data); }) .catch(error => { console.error(&#39;Error:&#39;, error); }); } }, // 在适当的位置调用submitData方法 }; ``` 为了解决开发阶段的跨域问题,可以在Vue CLI创建的项目中使用代理配置。在`vue.config.js`文件中添加如下配置: ```javascript module.exports = { devServer: { proxy: &#39;***&#39; } }; ``` 这里将所有请求代理到`***`,开发者需要根据实际目标服务器地址进行修改。 在生产环境中,解决跨域问题通常需要服务器端的支持。如果服务器支持CORS,需要在HTTP响应头中设置`Access-Control-Allow-Origin`。例如,在Node.js使用Express框架的情况下: ```javascript const express = require(&#39;express&#39;); const app = express(); app.use((req, res, next) => { res.header(&#39;Access-Control-Allow-Origin&#39;, &#39;*&#39;); res.header(&#39;Access-Control-Allow-Methods&#39;, &#39;GET, PUT, POST, DELETE&#39;); res.header(&#39;Access-Control-Allow-Headers&#39;, &#39;Origin, X-Requested-With, Content-Type, Accept&#39;); next(); }); // 服务器的路由和中间件设置 ``` 通过上述方法,可以实现在Vue.js项目中使用axios发送GETPOST请求,并解决跨域问题。为了更全面地掌握axios的使用和跨域问题解决方法,建议阅读《Vue.js与axios数据交互及跨域解决方案》一书,它通过实例代码详细介绍了axios的使用方法,并提供了完整的跨域解决方案。 参考资源链接:[Vue.js与axios数据交互及跨域解决方案](https://wenku.csdn.net/doc/645c973295996c03ac3c635c?spm=1055.2569.3001.10343)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dorable_Wander

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

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

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

打赏作者

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

抵扣说明:

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

余额充值