最新国产好看的视频,伊人天堂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;
  },

});

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

/**
 * 取消重復(fù)請求
 * @param config
 * @param f
 */
const removePending: any = (config: any, f: any) => {
  const flgUrl = config.url;
  if ( pending.indexOf(flgUrl) !== -1 ) {
    if ( f ) {
      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);
  }
);

/**
 * 響應(yīng)攔截器
 */
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)聽路由,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 詳解vue修改elementUI的分頁組件視圖沒更新問題

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

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

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

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

    vue-esign用途及使用方法詳細(xì)教程

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

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

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

    詳解element ui 添加自定義方法

    今天在修改 el-table 源碼過程中遇到一個頭大的問題,原本修改編譯后,將 element的子目錄lib下的文件復(fù)制到項目的響應(yīng)目錄里就可以了,但是這次總出問題,下面小編給大家分享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)代瀏覽器,但仍有一部分用戶可能仍在使用老舊的瀏覽器版本,本文將詳細(xì)介紹如何在Vue項目中實現(xiàn)低版本瀏覽器升級提示,并通過多個代碼示例來展示不同的應(yīng)用場景和技術(shù)點,需要的朋友可以參考下
    2024-10-10
  • Vue應(yīng)用中504錯誤(Gateway timeout)的原因與解決方法

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

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

    vue3+vite使用element-plus問題

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

最新評論

家居| 鄢陵县| 大新县| 彭水| 射洪县| 仁寿县| 兴仁县| 泰宁县| 韩城市| 大庆市| 罗定市| 武功县| 永春县| 新宁县| 衡阳县| 黄冈市| 泌阳县| 安乡县| 普洱| 南宫市| 武乡县| 宁德市| 依兰县| 南靖县| 四子王旗| 沐川县| 上蔡县| 娄烦县| 甘泉县| 襄城县| 阿巴嘎旗| 嫩江县| 贵德县| 安远县| 合阳县| 汶上县| 托里县| 深州市| 尉氏县| 特克斯县| 华蓥市|