国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用ts封裝一個(gè)Axios請求

這篇具有很好參考價(jià)值的文章主要介紹了使用ts封裝一個(gè)Axios請求。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

下面是一個(gè)簡單的 TypeScript 版本的封裝 Axios 請求的例子,基于 Axios 0.21.1 版本:

import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';

// 定義通用響應(yīng)結(jié)構(gòu)
export interface ApiResponse<T> {
  code: number;
  data: T;
  message: string;
}

// 創(chuàng)建一個(gè) Axios 實(shí)例
const axiosInstance = axios.create({
  baseURL: 'https://api.example.com',
});

// 定義請求攔截器
axiosInstance.interceptors.request.use((config: AxiosRequestConfig) => {
  // 在發(fā)送請求之前做些什么,比如添加 token 頭部等
  return config;
}, (error: any) => {
  // 對請求錯(cuò)誤做些什么
  return Promise.reject(error);
});

// 定義響應(yīng)攔截器
axiosInstance.interceptors.response.use((response: AxiosResponse) => {
  // 對響應(yīng)數(shù)據(jù)做些什么,比如處理通用響應(yīng)結(jié)構(gòu),返回 data 部分
  const apiResponse: ApiResponse<any> = response.data;
  return apiResponse.data;
}, (error: any) => {
  // 對響應(yīng)錯(cuò)誤做些什么
  return Promise.reject(error);
});

// 封裝 GET 請求
export function get<T>(url: string, params?: any, config?: AxiosRequestConfig): Promise<T> {
  return axiosInstance.get<T>(url, { params, ...config });
}

// 封裝 POST 請求
export function post<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {
  return axiosInstance.post<T>(url, data, config);
}

// 封裝 PUT 請求
export function put<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {
  return axiosInstance.put<T>(url, data, config);
}

// 封裝 DELETE 請求
export function del<T>(url: string, config?: AxiosRequestConfig): Promise<T> {
  return axiosInstance.delete<T>(url, config);
}

在這個(gè)示例中,我們首先定義了一個(gè)通用的響應(yīng)結(jié)構(gòu) ApiResponse,用來包裝 API 返回的數(shù)據(jù),包括狀態(tài)碼、數(shù)據(jù)和消息等信息。然后,我們創(chuàng)建了一個(gè) Axios 實(shí)例,定義了請求和響應(yīng)攔截器,以及封裝了 GET、POST、PUT 和 DELETE 請求的函數(shù)。每個(gè)函數(shù)都使用了 Axios 實(shí)例發(fā)送請求,并處理了響應(yīng)的通用結(jié)構(gòu),最后只返回了數(shù)據(jù)部分。

使用這些封裝的函數(shù),可以方便地發(fā)送請求,并處理通用響應(yīng)結(jié)構(gòu)。比如,我們可以這樣使用

import { get, post } from './api';

// 發(fā)送 GET 請求
get<User[]>('/users').then(users => {
  console.log(users);
});

// 發(fā)送 POST 請求
post<User>('/users', { name: 'Alice', age: 18 }).then(user => {
  console.log(user);
});

其中,我們可以在函數(shù)中指定返回的數(shù)據(jù)類型,例如 <User[]> 表示返回一個(gè) User 類型的數(shù)組,或者 表示返回一個(gè) User 類型的對象。

如何在封裝的 Axios 請求中添加一些常用的功能

添加請求超時(shí)功能

在網(wǎng)絡(luò)請求中,經(jīng)常會(huì)遇到請求超時(shí)的情況,為了提高用戶體驗(yàn),我們可以添加請求超時(shí)的功能,當(dāng)請求超過一定時(shí)間仍未返回時(shí),自動(dòng)取消請求并拋出異常。這可以通過設(shè)置 timeout 參數(shù)來實(shí)現(xiàn),例如:

// 封裝 GET 請求,并設(shè)置超時(shí)時(shí)間為 10 秒
export function get<T>(url: string, params?: any, config?: AxiosRequestConfig): Promise<T> {
  return axiosInstance.get<T>(url, { params, ...config, timeout: 10000 });
}

在這個(gè)示例中,我們?yōu)?GET 請求添加了一個(gè)超時(shí)時(shí)間為 10 秒的選項(xiàng)。當(dāng)請求超過 10 秒仍未返回時(shí),Axios 會(huì)自動(dòng)取消請求,并拋出一個(gè) Error 異常。我們可以在調(diào)用時(shí)捕獲這個(gè)異常,以便進(jìn)行錯(cuò)誤處理。

添加請求重試功能

有時(shí)候,在網(wǎng)絡(luò)不穩(wěn)定的情況下,請求可能會(huì)失敗,為了提高請求的成功率,我們可以添加請求重試的功能,即在請求失敗時(shí),自動(dòng)重試一定次數(shù),直到請求成功或達(dá)到最大重試次數(shù)為止。這可以通過設(shè)置 retry 和 retryDelay 參數(shù)來實(shí)現(xiàn),例如:

// 封裝 GET 請求,并添加請求重試功能
export function get<T>(url: string, params?: any, config?: AxiosRequestConfig): Promise<T> {
  const defaultConfig = { params, ...config };
  return axiosInstance.get<T>(url, {
    ...defaultConfig,
    retry: 3, // 最多重試 3 次
    retryDelay: 1000, // 每次重試間隔 1 秒
  });
}

在這個(gè)示例中,我們?yōu)?GET 請求添加了一個(gè)最多重試 3 次的選項(xiàng),每次重試間隔 1 秒。當(dāng)請求失敗時(shí),Axios 會(huì)自動(dòng)重試,并在達(dá)到最大重試次數(shù)后拋出一個(gè) Error 異常。我們可以在調(diào)用時(shí)捕獲這個(gè)異常,以便進(jìn)行錯(cuò)誤處理。

添加請求取消功能

有時(shí)候,在用戶操作過程中,可能需要取消正在進(jìn)行的請求,例如在切換頁面時(shí)取消上一次請求。為了實(shí)現(xiàn)這個(gè)功能,我們可以使用 Axios 的取消令牌 CancelToken 和取消函數(shù) cancel,例如:

import axios, { AxiosRequestConfig, AxiosResponse, CancelToken } from 'axios';

// 創(chuàng)建一個(gè)取消令牌
const cancelToken = axios.CancelToken.source();

// 封裝 GET 請求,并添加請求取消功能
export function get<T>(url: string, params?: any, config?: AxiosRequestConfig): Promise<T> {
  const defaultConfig = { params, ...config, cancelToken: cancelToken.token };
  return axiosInstance.get<T>(url, defaultConfig);
}

// 取消請求
export function cancelRequest() {
  cancelToken.cancel('請求已取消');
}

在上面的示例中,我們首先創(chuàng)建了一個(gè)取消令牌 cancelToken,然后將它添加到 GET 請求的配置中。在需要取消請求的時(shí)候,我們可以調(diào)用 cancelRequest 函數(shù)來執(zhí)行取消操作。這樣就可以在需要的時(shí)候隨時(shí)取消正在進(jìn)行的請求了。

添加請求緩存功能

有時(shí)候,一些請求的結(jié)果是不會(huì)經(jīng)常發(fā)生變化的,例如用戶的基本信息,這種情況下,我們可以使用請求緩存的功能,避免重復(fù)請求,提高系統(tǒng)的性能。這可以通過緩存請求結(jié)果來實(shí)現(xiàn),例如:

import axios, { AxiosRequestConfig } from 'axios';

// 緩存請求結(jié)果的 Map 對象
const cacheMap = new Map<string, any>();

// 封裝 GET 請求,并添加請求緩存功能
export function get<T>(url: string, params?: any, config?: AxiosRequestConfig): Promise<T> {
  const cacheKey = url + JSON.stringify(params);
  const cacheData = cacheMap.get(cacheKey);
  if (cacheData) {
    return Promise.resolve(cacheData);
  }
  const promise = axiosInstance.get<T>(url, { params, ...config });
  promise.then((res) => cacheMap.set(cacheKey, res.data));
  return promise;
}

在這個(gè)示例中,我們創(chuàng)建了一個(gè)緩存請求結(jié)果的 Map 對象 cacheMap,在 GET 請求時(shí),我們先根據(jù)請求 URL 和參數(shù)生成一個(gè)緩存鍵 cacheKey,然后在緩存對象中查找是否存在對應(yīng)的緩存數(shù)據(jù),如果有則直接返回,否則發(fā)送請求,并將請求結(jié)果緩存到 cacheMap 對象中。

這樣,下次發(fā)起相同的請求時(shí),如果緩存中存在對應(yīng)的數(shù)據(jù),就可以直接返回緩存數(shù)據(jù),避免了不必要的網(wǎng)絡(luò)請求,提高了系統(tǒng)的性能。

Axios請求的優(yōu)化的一些建議

  1. 使用攔截器批量處理請求和響應(yīng)數(shù)據(jù)。 如果我們需要對請求和響應(yīng)進(jìn)行一系列的處理,那么每個(gè)請求都單獨(dú)處理會(huì)導(dǎo)致代碼重復(fù)和維護(hù)成本增加??梢酝ㄟ^使用攔截器來統(tǒng)一處理,減少代碼重復(fù)。例如,可以在請求攔截器中添加公共請求頭,或者在響應(yīng)攔截器中統(tǒng)一處理錯(cuò)誤信息等。
  2. 合并請求,減少網(wǎng)絡(luò)請求次數(shù)。 對于一些需要發(fā)送多個(gè)請求的場景,可以將多個(gè)請求合并成一個(gè)請求,減少網(wǎng)絡(luò)請求次數(shù),提高系統(tǒng)性能。例如,可以使用 axios.all 或者 Promise.all 方法來合并多個(gè)請求。
  3. 使用 Axios 的并發(fā)請求功能。 在需要發(fā)送多個(gè)請求的時(shí)候,可以使用 Axios 的并發(fā)請求功能來同時(shí)發(fā)送多個(gè)請求,提高系統(tǒng)性能。例如,可以使用 axios.spread 方法來同時(shí)處理多個(gè)請求的響應(yīng)結(jié)果。
  4. 配置全局默認(rèn)參數(shù),避免重復(fù)設(shè)置。 如果在大部分請求中使用了相同的配置參數(shù),可以將這些參數(shù)設(shè)置為全局默認(rèn)參數(shù),避免在每個(gè)請求中重復(fù)設(shè)置。例如,可以通過 axios.defaults 來設(shè)置默認(rèn)的請求超時(shí)時(shí)間、公共請求頭等參數(shù)。
  5. 使用第三方插件來擴(kuò)展 Axios 功能。 如果需要使用更多的功能,可以通過使用第三方插件來擴(kuò)展 Axios 的功能。例如,可以使用 axios-mock-adapter 來模擬后端接口,或者使用 axios-retry 來實(shí)現(xiàn)請求重試功能。

版權(quán)為 OpenAI 的 ChatGPT 模型文章來源地址http://www.zghlxwxcb.cn/news/detail-591749.html

到了這里,關(guān)于使用ts封裝一個(gè)Axios請求的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • vue3【使用axios并封裝axios請求】

    vue3【使用axios并封裝axios請求】

    第一步:安裝axios 第二步:編寫請求文件 新建request.js 簡單的axios封裝,里面相關(guān)提示信息,自己可以引入element-plus去添加

    2024年02月04日
    瀏覽(88)
  • 四、axios在vite+ts使用class類二次封裝

    四、axios在vite+ts使用class類二次封裝

    引入需要的文件創(chuàng)建class類 index.ts 配置解決import.meta.env報(bào)錯(cuò)問題 status.ts types.ts api接口 創(chuàng)建element-puls.d.ts文件 完成后在script里用的彈框在ts不會(huì)報(bào)錯(cuò)

    2024年02月09日
    瀏覽(20)
  • vue2使用axios封裝請求數(shù)據(jù),教會(huì)你封裝,簡單易懂,輕松學(xué)會(huì)axios封裝請求數(shù)據(jù) 看一眼就會(huì) 手把手教會(huì)

    2、完成上面的步驟還不夠,還需要再創(chuàng)建一個(gè)文件夾api,然后在文件夾里面創(chuàng)建自定義的文件名(我創(chuàng)建的是cartApi.js)文件名根據(jù)自己的需求命名 下面就是根據(jù)自己的請求接口以及數(shù)據(jù)參數(shù)請求,下面的請求是一些常見的post、get請求以及傳參啥的(僅供參考,可以參考下面

    2024年01月24日
    瀏覽(99)
  • TypeScript封裝Axios

    因axios基礎(chǔ)使用十分簡單,可參考axios官方文檔,這里不在介紹他基本用法,主要講解攔截器。 攔截器主要分為兩種, 請求攔截器 和 響應(yīng)攔截器 。 請求攔截器 :請求發(fā)送之前進(jìn)行攔截,應(yīng)用于我們在請求發(fā)送前需要對請求數(shù)據(jù)做一些處理。例如: 攜帶token 當(dāng)請求時(shí)間過長

    2024年02月11日
    瀏覽(38)
  • vue3+ts+vite中封裝axios,使用方法從0到1

    vue3+ts+vite中封裝axios,使用方法從0到1

    http.ts文件內(nèi)容: methods.ts文件內(nèi)容: api/user.ts 用戶相關(guān)接口 types/user.d.ts定義接口ts類型 請求成功測試

    2024年02月02日
    瀏覽(18)
  • ts 簡易封裝 axios,統(tǒng)一 API

    ts 簡易封裝 axios,統(tǒng)一 API

    axios 本身已經(jīng)很好用了,看似多次一舉的封裝則是為了讓 axios 與項(xiàng)目解耦。 比如想要將網(wǎng)絡(luò)請求換成 fetch,那么只需按之前暴露的 api 重新封裝一下 fetch 即可,并不需要改動(dòng)項(xiàng)目代碼。 統(tǒng)一請求API 使用接口數(shù)據(jù)時(shí)能有代碼提示 先封裝一個(gè)通用的方法 request,然后在此基礎(chǔ)上

    2024年02月05日
    瀏覽(20)
  • 使用 Axios 實(shí)現(xiàn)前端網(wǎng)絡(luò)請求

    在現(xiàn)代的 Web 開發(fā)中,網(wǎng)絡(luò)請求是不可或缺的一部分。前端開發(fā)者需要與后端服務(wù)器通信以獲取數(shù)據(jù)、發(fā)送表單、或者執(zhí)行其他操作。在過去,開發(fā)者通常使用 XMLHttpRequest (XHR) 對象來處理這些請求,但現(xiàn)在有了更加現(xiàn)代化和簡潔的解決方案,其中一種就是 Axios。 Axios 是一個(gè)基

    2024年03月23日
    瀏覽(64)
  • 原生js創(chuàng)建get/post請求以及封裝方式、axios的基本使用

    原生js創(chuàng)建get請求 原生js創(chuàng)建post請求 原生get和post封裝方式1 原生get和post封裝方式2 axios的基本使用

    2024年02月21日
    瀏覽(26)
  • 【axios網(wǎng)絡(luò)請求庫】認(rèn)識Axios庫;axios發(fā)送請求、創(chuàng)建實(shí)例、創(chuàng)建攔截器、封裝請求

    功能特點(diǎn): 在瀏覽器中發(fā)送 XMLHttpRequests 請求 在 node.js 中發(fā)送 http請求 支持 Promise API 攔截請求和響應(yīng) 轉(zhuǎn)換請求和響應(yīng)數(shù)據(jù) 支持多種請求方式: axios(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[, c

    2024年02月10日
    瀏覽(65)
  • 優(yōu)化axios封裝之配置使用AbortController取消重復(fù)請求 防止用戶頻繁操作調(diào)用接口

    當(dāng)數(shù)據(jù)量過大請求緩慢時(shí)用戶點(diǎn)擊按鈕或者tab標(biāo)簽頁快速重復(fù)調(diào)用同一個(gè)請求時(shí),會(huì)導(dǎo)致數(shù)據(jù)錯(cuò)亂,當(dāng)只需要最新的請求數(shù)據(jù),并且中斷上一個(gè)重復(fù)請求時(shí),可以利用axios的CancelToken去中斷之前的請求。 ps:由于不是所有請求都需要這個(gè)邏輯 所以我封裝的時(shí)候增加了請求配置項(xiàng)

    2024年02月03日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包