首頁 > web前端 > 前端問答 > vue整合axios封裝請求

vue整合axios封裝請求

王林
發布: 2023-05-24 09:54:07
原創
756 人瀏覽過

Vue 組件化的開發方式讓我們的前端開發變得更加靈活、高效,而在這個過程中,與後端進行資料互動是不可避免的。而 Axios 是一個很好的資料請求框架,它提供了方便的API接口,使用簡單、可靠、易於擴展等優點,於是我們選擇把它整合到Vue專案中。在本文中,我們將介紹如何將 Axios 封裝成實用的請求方法,以便在Vue元件中使用。

Axios 簡介

一般來說,我們使用Axios 傳送請求會涉及以下三個步驟:

  1. 建立一個Axios 實例:
#
// axios实例的默认配置
const instance = axios.create({
  baseURL: '',
  timeout: 5000,
  headers: {
    'Content-Type': 'application/json'
  }
});
登入後複製
  1. 發送請求:
instance.get('/api/getUser', {
  params: {
    id: 123
  }
}).then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})
登入後複製
  1. 對請求結果回應:
instance.interceptors.response.use(res => {
  if (res.status === 200) {
    return res.data;
  } else {
    throw new Error(res.status);
  }
}, err => {
  throw new Error(err);
})
登入後複製

Axios 的使用非常簡單明了,但是如果每次在Vue 元件中使用時,都要重複編寫這些程式碼,既費時又容易出錯。所以,我們可以將其封裝成通用的請求方法:

Axios 請求封裝

我們可以採用Promise 這種非同步程式設計的方式,將Axios 請求封裝成通用方法,然後統一對傳回的結果進行處理。

import axios from 'axios';

axios.defaults.baseURL = '';
axios.defaults.headers.post['Content-Type'] = 'application/json';
axios.defaults.timeout = 5000;

// 请求拦截器
axios.interceptors.request.use(
  config => {
    // 将token添加到请求头中
    if (localStorage.getItem('accessToken')) {
      config.headers.Authorization = localStorage.getItem('accessToken');
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 响应拦截器
axios.interceptors.response.use(
  response => {
    if (response.status === 200) {
      return Promise.resolve(response);
    } else {
      return Promise.reject(response);
    }
  },
  error => {
    if (error.response.status) {
      switch (error.response.status) {
        case 401:
          // token过期,跳转到登录页
          break;
        case 404:
          // 请求资源不存在
          break;
        default:
          // 其他错误提示
          break;
      }
      return Promise.reject(error.response);
    }
  }
)

export default function request(options) {
  return new Promise((resolve, reject) => {
    axios(options).then(res => {
      resolve(res.data);
    }).catch(error => {
      reject(error);
    })
  })
}
登入後複製

以上程式碼中,我們建立了一個 Axios 實例並設定其預設配置,同時也加入了請求和回應的攔截器。在封裝的請求方法中,我們使用 Promise 來傳回請求的結果。

  • 請求攔截器中,我們可以將 Token 加入到請求頭中,也可在此統一對請求進行客製化處理。
  • 在回應攔截器中,我們可以對回應結果進行特殊處理,例如狀態碼錯誤的跳轉,資源不存在的提示、或其他錯誤提示等。

請求方法使用

將Axios 請求封裝成通用方法後,我們就可以在Vue 元件中使用它了,呼叫時只需要傳遞請求的基本參數:

import request from '@/utils/request';

export function fetchData() {
  return request({
    url: '/api/list',
    method: 'get'
  })
}
登入後複製

同樣,支援GET、POST、PUT、DELETE、PATCH 等HTTP 方法的請求,只需在參數中指定不同的方法即可。

request({
  url: '/api/user',
  method: 'post',
  data: {
    username: 'admin',
    password: '123456'
  }
});

request({
  url: '/api/user',
  method: 'put',
  params: {
    id: 123
  },
  data: {
    username: 'admin',
    password: '123456'
  }
});

request({
  url: '/api/user',
  method: 'delete',
  params: {
    id: 123
  }
});
登入後複製

結語

本文透過 Axios 在 Vue 專案中的整合和封裝,詳細講解如何封裝 Axios 請求方法。這種封裝方式可以大幅減少重複程式碼的編寫量,提高開發效率,同時也方便對請求結果進行統一處理。在使用中,我們可以將其配置及攔截器按需調整、擴展,以滿足不同的需求。

以上是vue整合axios封裝請求的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板