Axios用法详解
发布日期:2021-10-09 15:35:00 浏览次数:1 分类:技术文章

本文共 3498 字,大约阅读时间需要 11 分钟。

基本介绍

Axios是一个异步的http框架,可以在浏览器和nodejs中使用

特征

从浏览器中创建 XMLHttpRequests

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

全局方法

axios.request(config)axios.get(url[, config])axios.delete(url[, config])axios.head(url[, config])axios.post(url[, data[, config]])axios.put(url[, data[, config]])axios.patch(url[, data[, config]])

实例方法

axios#request(config)axios#get(url[, config])axios#delete(url[, config])axios#head(url[, config])axios#post(url[, data[, config]])axios#put(url[, data[, config]])axios#patch(url[, data[, config]])

实例创建

axios.create([config])

// 创建axios实例const service = axios.create({
baseURL: process.env.NODE_ENV === 'production' ? process.env.VUE_APP_BASE_API : '/', // api 的 base_url timeout: Config.timeout // 请求超时时间})

拦截器

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

其中service是Axios实例

// request拦截器service.interceptors.request.use(  config => {
//此处主要处理发送之前又处理的逻辑 if (getToken()) {
config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 } config.headers['Content-Type'] = 'application/json' return config }, //请求错误怎么处理 error => {
// Do something with request error console.log(error) // for debug Promise.reject(error) })
// response 拦截器service.interceptors.response.use(  response => {
//收到响应数据之后具体要做些什么 const code = response.status if (code < 200 || code > 300) {
Notification.error({
title: response.message }) return Promise.reject('error') } else {
return response.data } }, error => {
//响应错误的情况下具体要做哪些事情 let code = 0 try {
code = error.response.data.status } catch (e) {
if (error.toString().indexOf('Error: timeout') !== -1) {
Notification.error({
title: '网络请求超时', duration: 5000 }) return Promise.reject(error) } } if (code) {
if (code === 401) {
MessageBox.confirm( '登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' } ).then(() => {
store.dispatch('LogOut').then(() => {
location.reload() // 为了重新实例化vue-router对象 避免bug }) }) } else if (code === 403) {
router.push({
path: '/401' }) } else {
const errorMsg = error.response.data.message if (errorMsg !== undefined) {
Notification.error({
title: errorMsg, duration: 5000 }) } } } else {
Notification.error({
title: '接口请求失败', duration: 5000 }) } return Promise.reject(error) })

config常用参数

参数 描述
url 是用于请求的服务器 URL
method 是创建请求时使用的方法,默认是get
baseURL 将自动加在 url 前面,除非 url 是一个绝对 URL
transformRequest 允许在向服务器发送前,修改请求数据,只能用在 ‘PUT’, ‘POST’ 和 ‘PATCH’ 这几个请求方法
transformResponse 在传递给 then/catch 前,允许修改响应数据 transformResponse
headers 设置自定义请求头
params 是即将与请求一起发送的 URL 参数, 必须是一个无格式对象(plain object)或 URLSearchParams 对象
paramsSerializer 是一个负责 params 序列化的函数
data 请求主体被发送的数据, 只适用于这些请求方法 ‘PUT’, ‘POST’, 和 ‘PATCH’
timeout 指定请求超时的毫秒数(0 表示无超时时间)
withCredentials 表示跨域请求时是否需要使用凭证
auth 设置验证凭证
responseType 表示服务器响应的数据类型,可以是 ‘arraybuffer’, ‘blob’, ‘document’, ‘json’, ‘text’, ‘stream’, 默认为json
maxContentLength 定义允许的响应内容的最大尺寸

Axios为什么需要定义实例呢?

由于Axios对所有的http请求都支持了静态方法,那我们为什么还需要实例呢?

主要是因为实例支持拦截器,可以对所有的http请求方法进行拦截功能,如判断登录状态等,如果没登录则自动跳转登录页面,同时也可以进行session超时检测等。

参考文档

转载地址:https://blog.csdn.net/qinwuxian19891211/article/details/105938545 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Axios实例的使用实践
下一篇:jenkins上传External jar到nexus仓库

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年03月24日 08时29分38秒