Maison interface Web js tutoriel Comment utiliser Vue pour encapsuler secondairement le plug-in axios

Comment utiliser Vue pour encapsuler secondairement le plug-in axios

May 28, 2018 pm 03:01 PM
axios secondaire 封装

Cette fois, je vais vous montrer comment utiliser Vue pour ré-encapsuler le plug-in axios. Quelles sont les précautions pour utiliser Vue pour ré-encapsuler le plug-in axios. Voici des cas pratiques. , jetons un coup d'oeil.

Quelle que soit la méthode utilisée pour obtenir les données, pour un projet, le code doit être facile à maintenir et deuxièmement, il doit être magnifiquement écrit, donc l'ajout d'une couche d'encapsulation est nécessaire

vuejs2.0 vue-resource n'est plus maintenu, vuejs2.0 a utilisé axios, ce qui est la principale raison pour laquelle je vais passer à axios, sans plus tarder :

Exigences de base en matière d'emballage :

  1. Configuration d'url unifiée

  2. Demande d'API unifiée

  3. intercepteur de requête (requête), par exemple : Apportez un jeton, etc., définissez l'en-tête de la demande

  4. intercepteur de réponse (réponse), par exemple : gestion des erreurs unifiée , redirection de page, etc.

  5. Si nécessaire, combinez Vuex pour effectuer une animation de chargement global ou une gestion des erreurs

  6. Encapsulez axios dans un plug-in Vue et utilisez-le

Structure des fichiers

Utilisez vue-cli pour l'encapsulation associée, sous le dossier src :

src
  |
-- http 封装axios模块文件夹
   |
---- config.js axios的默认配置
---- api.js 二次封装axios,拦截器等
---- interface.js 请求接口文件
---- index.js 将axios封装成插件
Copier après la connexion

config.js

Référez-vous à gitHub pour la configuration par défaut. Ce qui suit n'est qu'un exemple :

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'
}
Copier après la connexion

PS : voici un outil Mock Easy Mock recommandé. outil. J'écrirai séparément sur la façon d'utiliser cet outil lorsque j'en aurai le temps à l'avenir.

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)
    })
  })
}
Copier après la connexion

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
}
Copier après la connexion

index.js

est encapsulé dans un plug-in Vue, qui peut être utilisé en (haut) (B) et (grille)

// 倒入所有接口
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
Copier après la connexion

Utilisation

À ce stade, tout est prêt. Effectuez les opérations suivantes dans main.js :

// 倒入 http 文件夹下的 index.js
import api from './http/index'
Vue.use(api)
// 此时可以直接在 Vue 原型上调用 $api 了
Copier après la connexion

Résumé

  1. Au-dessus du l'encapsulation secondaire est plus complète et répond essentiellement à nos besoins précédents

  2. En termes de gestion des erreurs, nous devons également nous mettre d'accord sur la valeur de retour avec le backend et conclure des accords spécifiques

  3. Il y a beaucoup de rappels encapsulés. Lorsque vous les utilisez, vous devez également ajouter then() pour traiter les résultats. En savoir plus sur async & wait. Bien sûr, les bonnes choses doivent être cachées. Je ne les partage pas...

PS : IE9 ne prend pas en charge Promise. Vous devez installer un polyfill

import 'babel-polyfill'
Copier après la connexion

Je crois que vous maîtrisez la méthode après avoir lu. C'est le cas dans cet article. Pour des choses plus excitantes, veuillez faire attention à php Autres articles connexes sur le site chinois !

Lecture recommandée :

Comment utiliser les composants parent-enfant dans Vue pour communiquer les composants de la liste de tâches

Comment utiliser Vue pour intégrer les modèles AdminLTE

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Choix de requête de données dans Vue : Axios ou Fetch ? Choix de requête de données dans Vue : Axios ou Fetch ? Jul 17, 2023 pm 06:30 PM

Choix de requête de données dans Vue : AxiosorFetch ? Dans le développement de Vue, la gestion des demandes de données est une tâche très courante. Choisir quel outil utiliser pour les demandes de données est une question à considérer. Dans Vue, les deux outils les plus courants sont Axios et Fetch. Cet article comparera les avantages et les inconvénients des deux outils et donnera un exemple de code pour vous aider à faire votre choix. Axios est un client HTTP basé sur Promise qui fonctionne dans les navigateurs et Node.

Utiliser efficacement Vue et Axios pour mettre en œuvre le traitement par lots des données frontales Utiliser efficacement Vue et Axios pour mettre en œuvre le traitement par lots des données frontales Jul 17, 2023 pm 10:43 PM

Utilisez efficacement Vue et Axios pour implémenter le traitement par lots des données frontales. Dans le développement front-end, le traitement des données est une tâche courante. Lorsque nous devons traiter une grande quantité de données, le traitement des données deviendra très lourd et inefficace s’il n’existe pas de méthode efficace. Vue est un excellent framework frontal et Axios est une bibliothèque de requêtes réseau populaire. Ils peuvent travailler ensemble pour implémenter le traitement par lots des données frontales. Cet article présentera en détail comment utiliser efficacement Vue et Axios pour le traitement par lots de données et fournira des exemples de code pertinents.

TrendForce : les produits de la plate-forme Blackwell de Nvidia permettent d'augmenter la capacité de production CoWoS de TSMC de 150 % cette année TrendForce : les produits de la plate-forme Blackwell de Nvidia permettent d'augmenter la capacité de production CoWoS de TSMC de 150 % cette année Apr 17, 2024 pm 08:00 PM

Selon les informations de ce site du 17 avril, TrendForce a récemment publié un rapport estimant que la demande pour les nouveaux produits de la plate-forme Blackwell de Nvidia est haussière et devrait entraîner une augmentation de la capacité totale de production d'emballages CoWoS de TSMC de plus de 150 % en 2024. Les nouveaux produits de la plate-forme Blackwell de NVIDIA comprennent des GPU de série B et des cartes accélératrices GB200 intégrant le propre processeur GraceArm de NVIDIA. TrendForce confirme que la chaîne d'approvisionnement est actuellement très optimiste quant au GB200. On estime que les livraisons en 2025 devraient dépasser le million d'unités, représentant 40 à 50 % des GPU haut de gamme de Nvidia. Nvidia prévoit de livrer des produits tels que le GB200 et le B100 au second semestre, mais le conditionnement des plaquettes en amont doit encore adopter des produits plus complexes.

Dans combien de temps les pièces FET connaîtront-elles une deuxième poussée ? Quel est le niveau prévu pour l'augmentation maximale ? Dans combien de temps les pièces FET connaîtront-elles une deuxième poussée ? Quel est le niveau prévu pour l'augmentation maximale ? Apr 14, 2024 am 09:16 AM

En tant que monnaie leader dans le domaine de l'intelligence artificielle de l'IA, la monnaie FET a attiré beaucoup d'attention en raison de son retour sur investissement considérable. La monnaie FET n'est pas seulement un jeton quantitatif divisible utilisé par la plateforme Fetch.ai, mais aussi les contrats intelligents de la plateforme. oracles. Une partie importante de. Avec l'arrivée du marché haussier, le prix des pièces FET continue d'augmenter, mais les investisseurs ne sont toujours pas satisfaits de cette tendance du marché. Ils veulent savoir dans combien de temps les pièces FET connaîtront-elles une deuxième hausse ? J'aimerais également savoir dans quelle mesure les analystes du cercle monétaire prédisent la hausse maximale des pièces FET ? Selon les prévisions des analystes du cercle, la deuxième poussée se produira en 2025, avec une hausse maximale de 8,15 dollars. Ensuite, l'éditeur vous le dira en détail. Dans combien de temps les pièces FET connaîtront-elles une deuxième poussée ? Selon les prévisions des analystes du cercle, la monnaie FET va exploser pour la deuxième fois.

Vue et Axios implémentent le traitement synchrone des demandes de données asynchrones Vue et Axios implémentent le traitement synchrone des demandes de données asynchrones Jul 17, 2023 am 10:13 AM

Vue et Axios réalisent un traitement synchrone des demandes de données asynchrones Introduction : Dans le développement frontal moderne, parce que la page doit obtenir des données via des demandes de données asynchrones et les afficher de manière dynamique, le traitement asynchrone est devenu une exigence inévitable. Cependant, les demandes de données asynchrones rendent souvent la logique du code complexe et difficile à maintenir. Dans le framework Vue, la bibliothèque Axios peut être utilisée pour implémenter facilement le traitement synchrone des demandes de données asynchrones, améliorant ainsi la lisibilité et la maintenabilité du code. 1. Introduction à Vue Vue est un framework frontal léger.

Taille du boîtier AMD « Strix Halo » FP11 exposée : équivalent à Intel LGA1700, 60 % plus grand que Phoenix Taille du boîtier AMD « Strix Halo » FP11 exposée : équivalent à Intel LGA1700, 60 % plus grand que Phoenix Jul 18, 2024 am 02:04 AM

Ce site Web a rapporté le 9 juillet que les processeurs de la série « Strix » à architecture AMD Zen5 auront deux solutions de packaging. Le plus petit StrixPoint utilisera le package FP8, tandis que le StrixHalo utilisera le package FP11. Source : source videocardz @Olrak29_ La dernière révélation est que la taille du boîtier FP11 de StrixHalo est de 37,5 mm x 45 mm (1 687 millimètres carrés), ce qui est la même que la taille du boîtier LGA-1700 des processeurs Intel AlderLake et RaptorLake. Le dernier APU Phoenix d'AMD utilise une solution de packaging FP8 d'une taille de 25*40 mm, ce qui signifie que le F de StrixHalo

Vue et Axios implémentent la gestion des erreurs et un mécanisme d'invite pour les demandes de données Vue et Axios implémentent la gestion des erreurs et un mécanisme d'invite pour les demandes de données Jul 17, 2023 am 09:04 AM

Vue et Axios implémentent la gestion des erreurs et un mécanisme d'invite pour les demandes de données Introduction : Dans le développement de Vue, Axios est souvent utilisé pour les demandes de données. Cependant, dans le processus de développement réel, nous rencontrons souvent des erreurs de requête ou le serveur renvoie des codes d'erreur. Afin d'améliorer l'expérience utilisateur et de détecter et gérer les erreurs de demande en temps opportun, nous devons utiliser certains mécanismes de gestion des erreurs et des invites. Cet article expliquera comment utiliser Vue et Axios pour implémenter des mécanismes de gestion des erreurs et d'invite pour les demandes de données, et fournira des exemples de code. Installer Axi

Technologie d'emballage et application en PHP Technologie d'emballage et application en PHP Oct 12, 2023 pm 01:43 PM

La technologie d'encapsulation et l'encapsulation d'applications en PHP sont un concept important dans la programmation orientée objet. Elle fait référence à l'encapsulation de données et d'opérations sur les données afin de fournir une interface d'accès unifiée aux programmes externes. En PHP, l'encapsulation peut être réalisée via des modificateurs de contrôle d'accès et des définitions de classe. Cet article présentera la technologie d'encapsulation dans PHP et ses scénarios d'application, et fournira quelques exemples de code spécifiques. 1. Modificateurs de contrôle d'accès encapsulés En PHP, l'encapsulation est principalement réalisée via des modificateurs de contrôle d'accès. PHP fournit trois modificateurs de contrôle d'accès,

See all articles