最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue+ts封裝axios網(wǎng)絡(luò)請求封裝方式

 更新時間:2025年12月06日 08:41:19   作者:仰望星空下的自己  
文章介紹了如何使用Vue和TypeScript封裝Axios網(wǎng)絡(luò)請求,并提供了一個示例文件`request.ts`,展示了如何封裝各種請求,此外,還提到了路由管理文件和狀態(tài)碼處理文件的結(jié)構(gòu)

vue+ts封裝axios網(wǎng)絡(luò)請求封裝

request.ts 文件

import axios from 'axios';
import router from '@/router';
import StatusInit from '@/utils/status/StatusInit' // 狀態(tài)碼的策略模式

const CancelToken: any = axios.CancelToken; // axios 的取消請求

let token = localStorage.getItem('token');

const service = axios.create({
  baseURL: '', // 可以不需要
  timeout: 5000,  // 超時時間
  withCredentials: true,
  headers: {
    'version': '1.0.1', // 接口的版本號
    'Authorization': 'Bearer ' + token, // 向后臺發(fā)送的token
    get: {
      'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
    },
    post: {
      'Content-Type': 'application/json;charset=utf-8'
    }
  },
  validateStatus () {
    return true;
  },

});

// 防止重復提交 利用axios的cancelToken
let pending: any[] = []; // 聲明一個數(shù)組用于存儲每個ajax請求的取消函數(shù)和ajax標識

/**
 * 取消重復請求
 * @param config
 * @param f
 */
const removePending: any = (config: any, f: any) => {
  const flgUrl = config.url;
  if ( pending.indexOf(flgUrl) !== -1 ) {
    if ( f ) {
      f('取消重復請求');
    } else {
      pending.splice(pending.indexOf( flgUrl ), 1); // 刪除記錄
    }
  } else {
    if ( f ) {
      pending.push( flgUrl );
    }
  }
}

/**
 * 請求攔截器
 */
service.interceptors.request.use(
  (config: any) => {
    if ( !config.neverCancel ) {
      // 生成canalToken
      config.cancelToken = new CancelToken((c: any) => {
        removePending(config, c);
      });
    }
    // 添加請求頭以及其他邏輯處理
    return config;
  },
  (error: any) => {
    Promise.resolve(error);
  }
);

/**
 * 響應攔截器
 */
service.interceptors.response.use(
  (response: any) => {
    removePending( response.config );
    const res = response.data;
    // 后端status錯誤判斷
    if ( res.status === 200 ) {
      let status = new StatusInit();
      status.init(res.status, res.msg, res);
      return Promise.resolve(res);
    } else {
      // 錯誤狀態(tài)碼處理
      return Promise.reject(res);
    }
  },
  (error: any) => {
    // Http錯誤狀態(tài)碼處理
    return Promise.reject(error);
  }
);


export default service;

各種請求的分裝

import request from '../request/request';

/**
 * 封裝get請求
 * @param {string} url 請求連接
 * @param {Object} params 請求參數(shù)
 * @param {Object} header 請求需要設(shè)置的header頭
 */
export const get = (url: string, params: object, header: {}) => {
  return request({
    url: url,
    method: 'get',
    params: params,
    headers: header
  });
}

/**
 * 封裝post請求
 * @param {string} url 請求連接
 * @param {Object} params 請求參數(shù)
 * @param {Object} header 請求的header頭
 */
export const post = (url: string, params: object, header: {}) => {
  return request({
    url: url,
    method: 'post',
    data: params,
    headers: header
  });
}

/**
 * 封裝put請求
 * @param {string} url 請求連接
 * @param {Object} params 請求參數(shù)
 * @param {Object} header 請求設(shè)置的header頭
 */
export const put = (url: string, params: object, header: {}) => {
  return request({
    url: url,
    method: 'put',
    data: params,
    headers: header
  });
}

/**
 * 封裝delete請求
 * @param {string} url 請求連接
 * @param {Object} params 請求參數(shù)
 * @param {Object} header 請求設(shè)置的header頭
 */
export const del = (url: string, params: object, header: {}) => {
  return request({
    url: url,
    method: 'delete',
    data: params,
    headers: header
  });
}


路由管理文件 在這里可以寫自己的路由信息

eg:

登錄的路由 const login = ‘login’;

在module.exports 里面添加 login: login

const baseUrl = ''; //域名
const index = 'index'; // 首頁路由

export default {
  baseUrl: baseUrl,
  index: index
}

請求以及接口路由調(diào)用文件

import {get, post, put, del} from '../utils/request/apiRequest'; // 引入各種請求方法
import api from './apiList'; // 引入請求api路由

/**
 * 首頁接口請求
 */
const index = () => {
  let url = api.baseUrl + api.index;
  return get(url, {}, {});
}

export default {
  index: index
}

StatusInit.ts

import Status200 from '@/utils/status/statusCode/Status200';
import Status401 from '@/utils/status/statusCode/Status401';
import Status from '@/utils/status/status';

export default class StatusInit
{
  public init(status: number, msg: string, res: object)
  {
    let state: Status = null;
    switch ( status ) {
      case 200:
        state = new Status200();
        break;
      case 401:
        state = new Status401();
        break;
    }
    state.status(status, msg, res);
  }
}

status.ts

export default interface Status {
  status(state: number, msg: string, res: object): any;
}

Status200.ts(其他狀態(tài)文件類似)

import Status from '@/utils/status/status';
import Message from '@/utils/Message/Message';

export default class Status200 implements Status
{
  public status(state: number, msg: string, res: object): any {
    let Message = new Message();
    Message.msg(msg, 'success', 1500, true, true, 100);
    return Promise.resolve(res);
  }
}

總結(jié)

以上經(jīng)測可用,可能會有忘記添加的文件。

這些僅為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue使用路由鉤子攔截器beforeEach和afterEach監(jiān)聽路由

    Vue使用路由鉤子攔截器beforeEach和afterEach監(jiān)聽路由

    這篇文章主要介紹了Vue使用路由鉤子攔截器beforeEach和afterEach監(jiān)聽路由,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • 詳解vue修改elementUI的分頁組件視圖沒更新問題

    詳解vue修改elementUI的分頁組件視圖沒更新問題

    這篇文章主要介紹了詳解vue修改elementUI的分頁組件視圖沒更新問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Vue3中使用vue3-print-nb實現(xiàn)打印功能

    Vue3中使用vue3-print-nb實現(xiàn)打印功能

    這篇文章主要為大家詳細介紹了Vue3中如何使用vue3-print-nb實現(xiàn)打印功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起參考一下
    2025-02-02
  • vue-esign用途及使用方法詳細教程

    vue-esign用途及使用方法詳細教程

    vue-esign作為基于Canvas API(瀏覽器提供的圖形繪制接口)開發(fā)的專業(yè)簽名組件,能夠幫助開發(fā)者快速實現(xiàn)跨終端的手寫簽名功能,完美解決移動端適配與電子合同簽署需求,這篇文章主要介紹了vue-esign用途及使用方法的相關(guān)資料,需要的朋友可以參考下
    2026-03-03
  • Vue.js進階知識點總結(jié)

    Vue.js進階知識點總結(jié)

    給大家分享了關(guān)于Vue.js想成為高手的5個總要知識點,需要的朋友可以學習下。
    2018-04-04
  • 詳解element ui 添加自定義方法

    詳解element ui 添加自定義方法

    今天在修改 el-table 源碼過程中遇到一個頭大的問題,原本修改編譯后,將 element的子目錄lib下的文件復制到項目的響應目錄里就可以了,但是這次總出問題,下面小編給大家分享element ui 添加自定義方法,感興趣的朋友一起看看吧
    2024-02-02
  • vue如何動態(tài)設(shè)置背景漸變色

    vue如何動態(tài)設(shè)置背景漸變色

    這篇文章主要介紹了vue如何動態(tài)設(shè)置背景漸變色問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Vue實現(xiàn)低版本瀏覽器升級提示的代碼示例

    Vue實現(xiàn)低版本瀏覽器升級提示的代碼示例

    在現(xiàn)代Web開發(fā)中,瀏覽器兼容性是一個重要的問題,盡管大多數(shù)用戶已經(jīng)轉(zhuǎn)向了現(xiàn)代瀏覽器,但仍有一部分用戶可能仍在使用老舊的瀏覽器版本,本文將詳細介紹如何在Vue項目中實現(xiàn)低版本瀏覽器升級提示,并通過多個代碼示例來展示不同的應用場景和技術(shù)點,需要的朋友可以參考下
    2024-10-10
  • Vue應用中504錯誤(Gateway timeout)的原因與解決方法

    Vue應用中504錯誤(Gateway timeout)的原因與解決方法

    在Vue前端應用中遇到504代理錯誤通常是由于請求在到達服務(wù)器之前超時,504錯誤表示網(wǎng)關(guān)超時,可能由后端服務(wù)響應慢、網(wǎng)絡(luò)問題、代理配置錯誤、請求負載過大、前端請求超時設(shè)置不當、服務(wù)器資源不足或第三方服務(wù)問題引起
    2024-09-09
  • vue3+vite使用element-plus問題

    vue3+vite使用element-plus問題

    這篇文章主要介紹了vue3+vite使用element-plus問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評論

宁夏| 衡山县| 辽宁省| 辉南县| 枞阳县| 蓬溪县| 吴桥县| 浮梁县| 申扎县| 新建县| 永城市| 沈丘县| 梁河县| 城固县| 武清区| 山东省| 乐清市| 闽清县| 容城县| 读书| 和硕县| 陕西省| 桑日县| 泰来县| 凭祥市| 金塔县| 天镇县| 长沙县| 南皮县| 永靖县| 固始县| 特克斯县| 绥中县| 连云港市| 呼玛县| 南华县| 永泰县| 阿克苏市| 博罗县| 滨州市| 东城区|