vue(24)网络请求模块axios使用「建议收藏」

vue(24)网络请求模块axios使用「建议收藏」什么是axiosAxios是一个基于promise的HTTP库,可以用在浏览器和node.js中。主要的作用:axios主要是用于向后台发起请求的,还有在请求中做更多是可控功能。a

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

什么是axios

Axios 是一个基于 promiseHTTP 库,可以用在浏览器和 node.js 中。

主要的作用:axios主要是用于向后台发起请求的,还有在请求中做更多是可控功能。

axios有8个特性

  • 从浏览器中创建 XMLHttpRequests
  • 从 `node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF
     

安装

安装十分简单,使用 npm:

npm install axios

 

案例

执行 GET 请求

axios
  .get("请求地址", {
    // 拼接参数写在params中
    params: {
      ID: 12345,
    },
  })
  // 成功后做的事情
  .then(function (response) {
    console.log(response);
  })
  // 失败后做的事情
  .catch(function (error) {
    console.log(error);
  });

执行POST请求

axios
  .post("请求地址", {
    firstName: "jkc",
    lastName: "123",
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

执行并发请求,当我们想要同时发出2个请求,可以使用axios.all()

function getUserAccount() {
  return axios.get("/user/12345");
}

function getUserPermissions() {
  return axios.get("/user/12345/permissions");
}

axios.all([getUserAccount(), getUserPermissions()]).then((res) => {
  console.log(res);
});

以上代码我们先定义了2个方法,每个方法都会发送一个请求,最后把2个方法都放在数组中,这样程序就会同时执行2个方法,且最后的结果是在数组中,结果如下:
vue(24)网络请求模块axios使用「建议收藏」
上面返回的结果是在数组中,到时候取结果的时候就要用res[0],如果你觉得这样麻烦,如果我们想展开的话,可以使用axios.spread方法

axios.all([getUserAccount(), getUserPermissions()]).then(
  axios.spread((res1, res2) => {
    console.log(res1);
    console.log(res2);
  })
);

此时,我们返回的结果就不是一个数组了,会分开来,结果如下:
vue(24)网络请求模块axios使用「建议收藏」
 

axios请求配置

以下是创建请求时可以用的配置选项。只有 url 是必需的。如果没有指定 method,请求将默认使用 get 方法。

{
  // `url` 是用于请求的服务器 URL
  url: '/user',

  // `method` 是创建请求时使用的方法
  method: 'get', // default

  // `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
  // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
  baseURL: 'https://some-domain.com/api/',

  // `headers` 是即将被发送的自定义请求头
  headers: {'X-Requested-With': 'XMLHttpRequest'},

  // `params` 是即将与请求一起发送的 URL 参数
  // 必须是一个无格式对象(plain object)或 URLSearchParams 对象
  params: {
    ID: 12345
  },

  // `data` 是作为请求主体被发送的数据
  // 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH'
  data: {
    firstName: 'Fred'
  },

  // `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
  // 如果请求话费了超过 `timeout` 的时间,请求将被中断
  timeout: 1000,

  // `auth` 表示应该使用 HTTP 基础验证,并提供凭据
  // 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头
  auth: {
    username: 'janedoe',
    password: 's00pers3cret'
  },
}

 

响应结构

发送网络请求成功后,返回的响应结构如下:

{
  // `data` 由服务器提供的响应
  data: {},

  // `status` 来自服务器响应的 HTTP 状态码
  status: 200,

    // `statusText` 来自服务器响应的 HTTP 状态信息
    statusText: 'OK',

  // `headers` 服务器响应的头
  headers: {},

  // `config` 是为请求提供的配置信息
  config: {},
  // 'request'
  // `request` is the request that generated this response
  // It is the last ClientRequest instance in node.js (in redirects)
  // and an XMLHttpRequest instance the browser
  request: {}
}

 

配置默认值

配置网络请求时,你可以指定将被用在各个请求的配置默认值
 

全局的 axios 默认值

axios.defaults.baseURL = 'https://api.example.com';  // 配置默认的baseURL
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;  // 配置默认请求头中的Authorization
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';  // 配置默认的post请求方式

 

自定义实例默认值

// 创建实例时配置默认值
const instance = axios.create({
  baseURL: 'https://api.example.com'
});

// 创建实例后更改默认值
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;

 

拦截器

在请求或响应被 thencatch 处理前拦截它们。

// 2.1.请求拦截器
  instance.interceptors.request.use(
    (config) => {
      console.log(config);
      // 1.比如config中的一些信息不符合服务器的要求
      // 2.比如每次发送网络请求时,都希望在界面中显示一个请求的图标
      // 3.某些网络请求(比如登录(token)),必须携带一些特殊的信息
      return config;
    },
    (error) => {
      console.log(error);
    }
  );

  // 2.2.响应拦截
  instance.interceptors.response.use(
    (res) => {
      return res.data;
    },
    (error) => {
      console.log(error);
    }
  );

 

项目中axios完整的封装

在真实项目开发中,我们会在src文件夹中创建一个utils文件夹,然后在文件夹中创建一个request.js文件,写入如下代码:

import axios from "axios";

export function request(config) {
  // 1.创建axios的实例
  const instance = axios.create({
    baseURL: "http://xxx.xxx.xx.xx:8000",
    timeout: 5000,
  });

  // 2.1.请求拦截器
  instance.interceptors.request.use(
    (config) => {
      console.log(config);
      // 1.比如config中的一些信息不符合服务器的要求
      // 2.比如每次发送网络请求时,都希望在界面中显示一个请求的图标
      // 3.某些网络请求(比如登录(token)),必须携带一些特殊的信息
      return config;
    },
    (error) => {
      console.log(error);
    }
  );

  // 2.2.响应拦截
  instance.interceptors.response.use(
    (res) => {
      return res.data;
    },
    (error) => {
      console.log(error);
    }
  );

  // 3.发送真正的网络请求
  return instance(config);
}

最后我们在main.js中给网络请求配置下全局属性即可

import { request } from "@/utils/request";

Vue.prototype.$request = request;

这样以后,我们在任何目录下,都可以直接使用request网络请求,不需要每次都导入了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/166075.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • fferrone_png转换svg

    fferrone_png转换svgffmpeg-vcodecrawvideo-frawvideo-pix_fmtbgr32-s1792x2176-i~/Downloads/dumpdata/dump_src_44_0_f2_1792x2176.raw-fimage2-vcodec pngscreenshot1.png颜色不对一般是RGB的值有问题 PIX_FMT_RGB24改成PIX_FM

    2022年9月25日
    3
  • Java调用第三方接口(http总结)

    Java调用第三方接口(http总结)业务需求:一般情况下都是后端提供接口,前端调用,解决需求,但是有的时候为了方便,复用别人的接口(网上的,公共的第三方接口(短信、天气等)),就出现了后端调用后端接口的情况。(类似JavaScript中的ajax一样获取数据,并对数据进行处理)对比一般情况:前端调用后端接口业务情况:后端调用后端接口几种方式总结:在Java项目中调用第三方接口的方式有:①通过JDK网络类Java….

    2022年5月22日
    42
  • tkmapper教程_tkmapper

    tkmapper教程_tkmapperTKmapper初学springboot的集成,方式分为两大类:基于starter的自动配置基于@MapperScan注解的手工配置在starter的逻辑中,如果你没有使用@MapperScan注解,你就需要在你的接口上增加@Mapper注解,否则MyBatis无法判断扫描哪些接口。<dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spri

    2022年10月7日
    4
  • CSS中的媒体类型media type[通俗易懂]

    CSS中的媒体类型media type[通俗易懂]madiatype作用首先要明白一点,我们平时写的HTML页面,可能在不同的媒体类型中显示,如可能显示在屏幕sreen上,也可能显示在纸质print上。那么当页面在不同的媒体类型中显示时,需要的样式可能是不一样的。比如,一般在screen上显示时,页面字体要大一些,在纸质媒体显示时,页面字体要小一些。那么如何告诉别人某个样式是适用于何种媒体类型的呢?这就要靠声明mediatype来实现了。

    2022年5月25日
    93
  • java面试题及答案整理(解决方案经理面试题)

    2012年毕业,2016年转行,没有一个体面的工作,机缘巧合之下,来到了大连,Java培训,一个全新的领域,迷茫、困惑、漫无目的的努力,转行真的被歧视,真的不行吗?我命由我不由天,我觉得我行!相信我,只要你足够努力,总有成为架构师,独挡一面的一天。最近参加了一些面试,效果不是很理想,项目介绍只有大框,没有突出重点,没有项目中的具体细节,因为都是看的B站视频,实际工作中都是在做重复的CRUD工作,愁人啊。618买的新书塑料还没拆!视频计划已经执行到第二篇了!熬夜学习,是刻苦奋斗还是自欺欺人?面试

    2022年4月16日
    161
  • pip卸载包命令_pip怎么卸载

    pip卸载包命令_pip怎么卸载在用pip卸载Django相关的模块时,由于操作不当,造成异常,结果再次执行piplist时,发现如下结果通过pip尝试了半天,对于这些异常的列表信息无法处理。最后,在相应的包安装目录下(本例为C:\ProgramFiles\Python37\Lib\site-packages)查看到如下情况将所有有前缀的文件夹(除了__pycache__文件夹)删除,重新执行pip…

    2022年10月17日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号