Vue3.0(八):网络请求库axios

网络请求库axios

axios官网

  • 功能特点
    • 在浏览器中发送 XMLHttpRequests请求
    • 在node.js中发送http请求
    • 支持Promise API
    • 拦截请求和响应
    • 转换请求和响应数据

axios请求方式

  • 支持多种请求方式

    axios(config)

    axios.request(config)

    axios.get(url[, config])

    axios.delete(url[, config])

    axios.head(url[, config])

    axios.options(url[, config])

    axios.post(url[, data[, config]])

    axios.put(url[, data[, config]])

    axios.patch(url[, data[, config]])

    axios.postForm(url[, data[, config]])

    axios.putForm(url[, data[, config]])

    axios.patchForm(url[, data[, config]])

  • 常见的 config配置选项

    • 请求地址(url:‘/user’
    • 请求类型(method:‘get’
    • 请求根路径(baseURL:‘http://www.xxx.com’
    • 请求前的数据处理(transformRequest:[function(data){}]
    • 请求后的数据处理(transformResponse:[function(data){}]
    • 自定义的请求头(headers:{‘x-Requested-With’:‘XMLHttpRequest’}
    • URL查询对象(params:{id:12}

基本使用

  • 通过 npm install axios进行安装

  • 在main.js中引入axios

import axios from "axios";
  • 使用 axios.request(config)发送网络请求,默认是get方法
axios.request("http://xxxxx").then((res) => {
  console.log(res.data);
});
  • 使用 axios.get(url[, config])发送网络请求
//第一种写法,把query直接写在url中
axios.get("http://xxxx?id=500665346").then((res) => {
    console.log(res.data);
});

//第二种写法,通过config写query
axios
    .get("http://xxxx", {
    params: {
        id: 500665346,
    },
})
    .then((res) => {
    console.log(res.data);
});
  • 使用 axios.post(url[, data[, config]])发送网络请求
//第二个参数可以直接传请求对象
axios
  .post("http://xxxxx", {
    username: "admin",
    password: "123456",
  })
  .then((res) => {
    console.log(res.data);
  });
//第二个参数可以传config对象,post请求对象需要用data包裹

axios
  .post("http://xxxx", {
    data: {
      username: "admin",
      password: "123456",
    },
  })
  .then((res) => {
    console.log(res.data);
  });

baseURL

针对于项目中的多个网络请求,我们每次写网络请求的host会显得十分麻烦,因此可以借助baseURL进行简化

  • 通过 axios.defaults.baseURL进行设置
import axios from "axios"

const baseURL = "http://xxxx"
axios.defaults.baseURL = baseURL
axios.defaults.timeout = 1000

axios.get("/home").then((res)=>{
    console.log("res",res.data)
})

axios.all发送多个请求

  • axios.all中传入一个数组,当都有结果的时候,才会调用then方法
  • 实际上在axios的内部,就是调用了promise.all方法
axios.all([
    axios.get("http://xxxx"),
    axios.get("http://xxx")
]).then((res)=>{
    console.log(res)
})

axios的创建实例

  • 在上面的例子中,我们通过import引入的默认实例发送的网络请求
import axios from "axios"
axios.get()...
  • 但是在实际的项目开发中,有可能数据从多个不同的服务器中获取

  • 因此我们可以通过axios创建不同的实例

import axios from "axios"

const instance = axios.create({
    baseURL:"http://123.456.789"
})

const instance = axios.create({
    baseURL:"http://456.789.123"
})


//通过创建的实例发送网络请求
instance.get()
instance.get()

请求和响应的拦截

  • 通过 axios.interceptors.request/response对请求和响应进行拦截
// axios.interceptors.request.use(成功的回调,失败的回调)
axios.interceptors.request.use(
  (config) => {
    //会将请求的配置传入
    //1.开始loading动画
    //2.对原来的配置进行修改
    //2.1header
    //2.2认证登录:token/cookie
    //请求参数的某些转化
    console.log("请求成功");
    return config;
  },
  (err) => {
    console.log("请求失败了");
    return err;
  }
);

// axios.interceptors.response.use(成功的回调,失败的回调)
axios.interceptors.response.use(
  (res) => {
    console.log("响应成功");
    //return之后的数据,会在请求后的.then中接收到
    return res.data;
  },
  (err) => {
    console.log("请求失败");
    return err;
  }
);

axios
  .get("http://123.207.32.32:8000/home/multidata")
  .then((res) => {
    console.log(res);
  })
  .catch((err) => {
    console.log(err);
  });
  • 33
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3.0 中,我们可以使用 axios 来发送网络请求。为了更好地管理和封装网络请求,我们可以将 axios 的一些常用配置和方法进行封装,以便在多个组件中进行调用。 下面是一个简单的 axios 封装示例: ```javascript import axios from 'axios' const instance = axios.create({ baseURL: 'http://localhost:3000', timeout: 5000 }) instance.interceptors.request.use(config => { // 在请求发送之前做些什么 return config }, error => { // 对请求错误做些什么 return Promise.reject(error) }) instance.interceptors.response.use(response => { // 对响应数据做些什么 return response.data }, error => { // 对响应错误做些什么 return Promise.reject(error) }) export default { get(url, params) { return instance.get(url, { params }) }, post(url, data) { return instance.post(url, data) } } ``` 在上面的代码中,我们首先使用 `axios.create` 方法创建了一个 axios 实例,并对实例的一些常用配置进行了设置,如 `baseURL` 和 `timeout`。然后,我们使用 `interceptors` 对请求和响应进行拦截处理,以便在请求发送和响应返回时做一些额外的操作,如在请求发送之前添加请求头信息,或者在响应返回时对响应数据进行解析。 最后,我们将封装好的请求方法暴露出去,并使用 `instance.get` 和 `instance.post` 方法来发送 GET 和 POST 请求。 使用时,我们只需要在组件中引入封装好的请求方法,并调用即可: ```javascript import request from '@/api/request' export default { methods: { fetchData() { request.get('/api/data', { page: 1, size: 10 }).then(res => { console.log(res) }) } } } ``` 在上面的代码中,我们先引入了封装好的请求方法,并在方法中调用了 `request.get` 方法来发送 GET 请求,并传入了请求的 URL 和参数。请求成功后,我们将返回的数据打印到控制台上。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值