ホームページ ウェブフロントエンド jsチュートリアル Vue を使用して axios プラグインを二次カプセル化する方法

Vue を使用して axios プラグインを二次カプセル化する方法

May 28, 2018 pm 03:01 PM
axios 二次的 カプセル化

今回は、Vue を使用して axios プラグインを再カプセル化する方法と、Vue を使用して axios プラグインを再カプセル化するときの 注意事項 について説明します。見て。

データを取得するためにどのような方法が使用されるとしても、プロジェクトの場合、コードは保守しやすくなければならず、第二にコードは美しく書かれなければならないため、カプセル化の層を追加することが必要です

vuejs2.0 は vue- を保守しなくなりました。 vuejs2.0 はすでに axios を使用しており、これが axios に切り替える主な理由です:

基本的なパッケージ化要件:

    統一された API リクエスト
  1. request (リクエスト) インターセプター、例: トークンの取得、リクエスト ヘッダーの設定
  2. response (応答) インターセプター、例: 統合
  3. エラー処理

    、ページ リダイレクトなど

  4. 必要に応じて組み合わせるVuex はグローバルな読み込みアニメーション、またはエラー処理を行います

  5. ファイル構造を使用して axios を Vue プラグインにカプセル化します
  6. 関連するカプセル化には、src フォルダー内で vue-cli を使用します:
  7. src
      |
    -- http 封装axios模块文件夹
       |
    ---- config.js axios的默认配置
    ---- api.js 二次封装axios,拦截器等
    ---- interface.js 请求接口文件
    ---- index.js 将axios封装成插件
    ログイン後にコピー
  8. config。 js

以下は gitHub を参照しています:

export default {
  method: 'post',
  // 基础url前缀
  baseURL: 'https://easy-mock.com/mock/5ad75e9f41d4d65f0e935be4/example',
  // 请求头信息
  headers: {
   'Content-Type':'application/json;charset=UTF-8'
  },
  // 参数
  data: {},
  // 设置超时时间
  timeout: 10000,
  // 携带凭证
  withCredentials: false,
  // 返回数据类型
  responseType: 'json'
}
ログイン後にコピー
PS: 上記のリクエスト アドレスはこのツールからのものです。このツールの使い方については、今後時間があるときに別途書きたいと思います。

api.js

import axios from 'axios' // 注意先安装哦
import config from './config.js' // 倒入默认配置
import qs from 'qs' // 序列化请求数据,视服务端的要求
export default function $axios (options) {
  return new Promise((resolve, reject) => {
    const instance = axios.create({
      baseURL: config.baseURL,
      headers: {},
      transformResponse: [function (data) {}]
    }
  )
  // request 拦截器
  instance.interceptors.request.use(
    config => {
      // Tip: 1
      // 请求开始的时候可以结合 vuex 开启全屏的 loading 动画
      // Tip: 2 
      // 带上 token , 可以结合 vuex 或者重 localStorage
      // if (store.getters.token) {
      //   config.headers['X-Token'] = getToken() // 让每个请求携带token--['X-Token']为自定义key 请根据实际情况自行修改
      // } else {
      //   // 重定向到登录页面  
      // }
      // Tip: 3
      // 根据请求方法,序列化传来的参数,根据后端需求是否序列化
      if (config.method.toLocaleLowerCase() === 'post' 
        || config.method.toLocaleLowerCase() === 'put' 
        || config.method.toLocaleLowerCase() === 'delete') {
        config.data = qs.stringify(config.data)
      }
      return config
    },
    error => {
      // 请求错误时做些事(接口错误、超时等)
      // Tip: 4
      // 关闭loadding
      console.log('request:', error) 
    
      // 1.判断请求超时
      if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
        console.log('根据你设置的timeout/真的请求超时 判断请求现在超时了,你可以在这里加入超时的处理方案')
        // return service.request(originalRequest);//例如再重复请求一次
      }
      // 2.需要重定向到错误页面
      const errorInfo = error.response
      console.log(errorInfo)
      if (errorInfo) {
        // error =errorInfo.data//页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.reject
        const errorStatus = errorInfo.status; // 404 403 500 ... 等
        router.push({
          path: `/error/${errorStatus}`
        })
      }
      return Promise.reject(error) // 在调用的那边可以拿到(catch)你想返回的错误信息
    }
  )
 
  // response 拦截器
  instance.interceptors.response.use(
    response => {
      let data;
      // IE9时response.data是undefined,因此需要使用response.request.responseText(Stringify后的字符串)
      if(response.data == undefined){
        data = response.request.responseText
      } else{
        data = response.data
      }
      // 根据返回的code值来做不同的处理(和后端约定)
      switch (data.code) {
        case '':
        break;
        default:
      }
      // 若不是正确的返回code,且已经登录,就抛出错误
      // const err = new Error(data.description)
      // err.data = data
      // err.response = response
      // throw err
      return data
    },
    err => {
      if (err && err.response) {
        switch (err.response.status) {
          case 400:
          err.message = '请求错误'
          break
      
          case 401:
          err.message = '未授权,请登录'
          break
      
          case 403:
          err.message = '拒绝访问'
          break
      
          case 404:
          err.message = `请求地址出错: ${err.response.config.url}`
          break
      
          case 408:
          err.message = '请求超时'
          break
      
          case 500:
          err.message = '服务器内部错误'
          break
      
          case 501:
          err.message = '服务未实现'
          break
      
          case 502:
          err.message = '网关错误'
          break
      
          case 503:
          err.message = '服务不可用'
          break
      
          case 504:
          err.message = '网关超时'
          break
      
          case 505:
          err.message = 'HTTP版本不受支持'
          break
      
          default:
        }
      }
      console.error(err)
      // 此处我使用的是 element UI 的提示组件
      // Message.error(`ERROR: ${err}`);
      return Promise.reject(err) // 返回接口返回的错误信息
    }
  )
 
  //请求处理
  instance(options)
    .then((res) => {
      resolve(res)
      return false
    })
    .catch((error) => {
      reject(error)
    })
  })
}
ログイン後にコピー
interface.js

import axios from './api' // 倒入 api
/* 将所有接口统一起来便于维护
 * 如果项目很大可以将 url 独立成文件,接口分成不同的模块
 * 此处的数据依然来自 Easy Mock
 */
// 单独倒出
export const query = params => {
  return axios({
    url: '/query',
    method: 'get',
    params
  })
}
 
export const mock = params => {
  return axios({
    url: '/mock',
    method: 'get',
    params
  })
}
export const upload = data => {
  return axios({
    url: '/upload',
    method: 'post',
    data
  })
}
// 默认全部倒出
// 根绝需要进行 
export default {
  query,
  mock,
  upload
}
ログイン後にコピー

index.js

はVueプラグインにカプセル化されており、(B)の(高)を簡単に使用できます

// 倒入所有接口
import apiList from './interface'
const install = Vue => {
  if (install.installed) 
    return;
  install.installed = true;
  Object.defineProperties(Vue.prototype, {
    // 注意哦,此处挂载在 Vue 原型的 $api 对象上
    $api: {
      get() {
        return apiList
      }
    }
  })
}
export default install
ログイン後にコピー

使用

ここまでで、main.js で次の操作を実行します。

// 倒入 http 文件夹下的 index.js
import api from './http/index'
Vue.use(api)
// 此时可以直接在 Vue 原型上调用 $api 了
ログイン後にコピー
概要

上記の 2 番目のパッケージ化は、より包括的であり、基本的に以前のニーズを満たします

エラー処理の場合は、バックエンドと戻り値について合意し、特定の取り決めを行う必要があります

それを使用する場合、結果を処理するために then() を追加する必要もあります。非同期と待機を理解してください。もちろん、良いものは非表示にする必要があります。共有しません...
  1. PS: IE9 は Promise をサポートしていません。ポリフィルをインストールする必要があります
  2. import 'babel-polyfill'
    ログイン後にコピー
  3. この記事の事例を読んで方法をマスターしました。さらにエキサイティングなコンテンツについては、php 中国語 Web サイトの他の関連記事に注目してください。

    推奨読書:
  4. Vue で親子コンポーネントを使用して todolist コンポーネントを通信する方法

Vue を使用して AdminLTE テンプレートを統合する方法

以上がVue を使用して axios プラグインを二次カプセル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue でのデータ リクエストの選択: Axios または Fetch? Vue でのデータ リクエストの選択: Axios または Fetch? Jul 17, 2023 pm 06:30 PM

Vue でのデータ リクエストの選択: AxiosorFetch? Vue 開発では、データ リクエストの処理は非常に一般的なタスクです。データリクエストにどのツールを使用するかを選択することは、考慮する必要がある問題です。 Vue で最も一般的なツールは、Axios と Fetch の 2 つです。この記事では、両方のツールの長所と短所を比較し、選択に役立つサンプル コードをいくつか示します。 Axios は、ブラウザおよび Node.js で動作する Promise ベースの HTTP クライアントです。

Vue と Axios を効率的に活用してフロントエンド データのバッチ処理を実装する Vue と Axios を効率的に活用してフロントエンド データのバッチ処理を実装する Jul 17, 2023 pm 10:43 PM

Vue と Axios を効率的に活用して、フロントエンド データのバッチ処理を実装します。フロントエンド開発ではデータ処理が一般的なタスクです。大量のデータを処理する必要がある場合、効果的な方法がなければ、データの処理は非常に煩雑で非効率的になってしまいます。 Vue は優れたフロントエンド フレームワークであり、Axios は人気のあるネットワーク リクエスト ライブラリであり、連携してフロントエンド データのバッチ処理を実装できます。この記事では、Vue と Axios を効率的に使用してデータのバッチ処理を行う方法を詳しく紹介し、関連するコード例を示します。

FETコインはどれくらいで二度目の高騰を経験するでしょうか?最大上昇率はどれくらいになると予想されますか? FETコインはどれくらいで二度目の高騰を経験するでしょうか?最大上昇率はどれくらいになると予想されますか? Apr 14, 2024 am 09:16 AM

FET 通貨は、AI 人工知能の分野での主要な通貨として、Fetch.ai プラットフォームで使用される定量的な分割可能なトークンであるだけでなく、プラットフォームのスマート コントラクトやオラクルの重要な部分。強気市場の到来により、FET コインの価格は上昇し続けていますが、投資家はこの市場動向にまだ満足していません。彼らは、FET コインがいつ再び高騰するのかを知りたいと考えています。また、通貨サークルのアナリストがFETコインの最大上昇をどれくらい予測しているか知りたいです。同サークルのアナリストの予測によると、2回目の高騰は2025年に起こり、最大値上がりは8.15ドルになるという。続いて編集者が詳しくお伝えします。 FETコインはどれくらいで二度目の高騰を経験するでしょうか?同界のアナリストらの予測によると、FET通貨は二度目の爆発を起こすだろう。

TrendForce: Nvidia の Blackwell プラットフォーム製品により、TSMC の CoWoS 生産能力は今年 150% 増加します TrendForce: Nvidia の Blackwell プラットフォーム製品により、TSMC の CoWoS 生産能力は今年 150% 増加します Apr 17, 2024 pm 08:00 PM

4月17日の当サイトのニュースによると、TrendForceは最近、Nvidiaの新しいBlackwellプラットフォーム製品に対する需要は強気で、2024年にはTSMCのCoWoSパッケージング総生産能力が150%以上増加すると予想されるレポートを発表した。 NVIDIA Blackwell の新しいプラットフォーム製品には、B シリーズ GPU と、NVIDIA 独自の GraceArm CPU を統合する GB200 アクセラレータ カードが含まれます。 TrendForce は、サプライチェーンが現在 GB200 について非常に楽観的であることを確認しており、2025 年の出荷台数は 100 万台を超え、Nvidia のハイエンド GPU の 40 ~ 50% を占めると予想されています。 Nvidiaは今年下半期にGB200やB100などの製品を提供する予定だが、上流のウェーハパッケージングではさらに複雑な製品を採用する必要がある。

Vue と Axios は非同期データリクエストの同期処理を実装します。 Vue と Axios は非同期データリクエストの同期処理を実装します。 Jul 17, 2023 am 10:13 AM

Vue と Axios は非同期データ リクエストの同期処理を実装します。 はじめに: 最新のフロントエンド開発では、ページが非同期データ リクエストを通じてデータを取得し、それを動的に表示する必要があるため、非同期処理は避けられない要件となっています。ただし、非同期データ要求によりコード ロジックが複雑になり、保守が困難になることがよくあります。 Vue フレームワークでは、Axios ライブラリを使用して非同期データ リクエストの同期処理を簡単に実装できるため、コードの可読性と保守性が向上します。 1. Vue の概要 Vue は軽量のフロントエンド フレームワークです。

AMD「Strix Halo」FP11のパッケージサイズを公開:Intel LGA1700と同等、Phoenixより60%大きい AMD「Strix Halo」FP11のパッケージサイズを公開:Intel LGA1700と同等、Phoenixより60%大きい Jul 18, 2024 am 02:04 AM

このWebサイトは7月9日、AMD Zen5アーキテクチャの「Strix」シリーズプロセッサには2つのパッケージングソリューションがあり、小型のStrixPointはFP8パッケージを使用し、StrixHaloはFP11パッケージを使用すると報じた。出典: videocardz 出典 @Olrak29_ 最新の事実は、StrixHalo の FP11 パッケージ サイズが 37.5mm*45mm (1687 平方ミリメートル) であり、これは Intel の AlderLake および RaptorLake CPU の LGA-1700 パッケージ サイズと同じであるということです。 AMD の最新の Phoenix APU は、サイズ 25*40mm の FP8 パッケージング ソリューションを使用しています。これは、StrixHalo の F

Vue と Axios は、データ リクエストに対するエラー処理とプロンプト メカニズムを実装します。 Vue と Axios は、データ リクエストに対するエラー処理とプロンプト メカニズムを実装します。 Jul 17, 2023 am 09:04 AM

Vue と Axios は、データ リクエストに対するエラー処理とプロンプト メカニズムを実装します。 はじめに: Vue 開発では、Axios はデータ リクエストによく使用されます。しかし、実際の開発プロセスでは、リクエストエラーが発生したり、サーバーがエラーコードを返したりすることがよくあります。ユーザー エクスペリエンスを向上させ、リクエスト エラーをタイムリーに検出して処理するには、エラー処理とプロンプトにいくつかのメカニズムを使用する必要があります。この記事では、Vue と Axios を使用してエラー処理とデータ リクエストのプロンプト メカニズムを実装する方法を紹介し、コード例を示します。 Axi をインストールする

C++ 関数はコードをカプセル化することで GUI 開発の効率をどのように向上させますか? C++ 関数はコードをカプセル化することで GUI 開発の効率をどのように向上させますか? Apr 25, 2024 pm 12:27 PM

コードをカプセル化することにより、C++ 関数は GUI 開発効率を向上させることができます。 コードのカプセル化: 関数はコードを独立した単位にグループ化し、コードの理解と保守を容易にします。再利用性: 関数はアプリケーション間で再利用できる共通の機能を作成し、重複やエラーを削減します。簡潔なコード: カプセル化されたコードにより、メイン ロジックが簡潔になり、読みやすく、デバッグしやすくなります。

See all articles