📜  axios 打字稿(1)

📅  最后修改于: 2023-12-03 14:39:26.231000             🧑  作者: Mango

Axios介绍

Axios是一个基于Promise的HTTP客户端,可以用于浏览器和node.js。它有以下特点:

  • 从浏览器中创建XMLHttpRequests
  • 从node.js创建http请求
  • 支持Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据
  • 客户端支持防止CSRF
安装
npm install axios
基本用法

创建一个基本的GET请求:

axios.get('/user?ID=12345')
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

发送POST请求:

axios.post('/user', {
    firstName: 'John',
    lastName: 'Doe'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });
拦截请求和响应

可以为请求和响应添加拦截器:

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  // 对请求做些什么
  return config;
}, function (error) {
  // 错误处理
  return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
  // 对响应数据做些什么
  return response;
}, function (error) {
  // 错误处理
  return Promise.reject(error);
});
自定义实例

可以使用自定义配置创建新的Axios实例:

const instance = axios.create({
  baseURL: 'https://some-domain.com/api/',
  timeout: 1000,
  headers: {'X-Custom-Header': 'foobar'}
});

instance.get('/user?ID=12345')
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });
取消请求

可以使用CancelToken取消请求:

const { CancelToken } = axios;
const source = CancelToken.source();

axios.get('/user', {
  cancelToken: source.token
}).catch(function (thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    console.log(thrown);
  }
});

// 取消请求
source.cancel('Operation canceled by the user.');
不同请求类型的别名

下面是别名方法:

  • 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]])
封装get、post等方法

可以自己封装get、post等方法:

import axios from 'axios';
import qs from 'qs';

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

// 封装get方法
function get(url, params){
    return new Promise((resolve, reject) =>{
        axios.get(url, {
            params: params
        }).then(res => {
            resolve(res.data);
        }).catch(err =>{
            reject(err.data)
        })
    });
}

// 封装post方法
function post(url, params) {
  return new Promise((resolve, reject) => {
    axios.post(url, qs.stringify(params))
      .then(res => {
        resolve(res.data);
      })
      .catch(err =>{
        reject(err.data)
      })
  });
}

export default {
    get,
    post
}