Mehrere Möglichkeiten, Axios in Vue zu kapseln

Mehrere Möglichkeiten, Axios in Vue zu kapseln

Basisversion

Schritt 1: Axios konfigurieren

Erstellen Sie zunächst ein Service.js, das die Axios-Konfiguration und Interceptors speichert und schließlich ein Axios-Objekt exportiert. Ich verwende meist häufiger elementUI, du kannst hier aber auch deine eigene UI-Bibliothek verwenden.

Axios von „Axios“ importieren
importiere { Nachricht, Wird geladen } von 'element-ui'
const ConfigBaseURL = 'https://localhost:3000/' //Standardpfad, Sie können auch env verwenden, um die Umgebung festzulegen let loadingInstance = null //Hier wird geladen
//Verwenden Sie die Methode „create“, um eine Axios-Instanz zu erstellen. export const Service = axios.create({
  Timeout: 7000, // Anforderungstimeout baseURL: ConfigBaseURL,
  Methode: 'post',
  Überschriften: {
    „Inhaltstyp“: „Anwendung/json;Zeichensatz=UTF-8“
  }
})
// Anforderungs-Interceptor hinzufügen Service.interceptors.request.use(config => {
  loadingInstance = Wird geladen.service({
    Sperre: wahr,
    Text: „wird geladen …“
  })
  Konfiguration zurückgeben
})
// Antwort-Interceptor hinzufügen Service.interceptors.response.use(response => {
  wird geladenInstance.schließen()
  // console.log(Antwort)
  Antwortdaten zurückgeben
}, Fehler => {
  console.log('TCL: Fehler', Fehler)
  const msg = Fehler.Nachricht !== undefiniert ? Fehler.Nachricht : ''
  Nachricht({
    Meldung: 'Netzwerkfehler' + msg,
    Typ: "Fehler",
    Dauer: 3 * 1000
  })
  wird geladenInstance.schließen()
  returniere Promise.reject(Fehler)
})

Die spezifische Interceptor-Logik hängt vom jeweiligen Unternehmen ab. Ich habe hier keine Logik, ich habe nur ein globales Laden hinzugefügt.

Schritt 2: Kapseln Sie die Anfrage

Hier erstelle ich eine weitere request.js, die die konkrete Anfrage enthält.

importiere {Service} aus './Service'
Exportfunktion getConfigsByProductId(productId) {
  return Dienst({
    URL: "/manager/getConfigsByProductId",
    Parameter: { Produkt-ID: Produkt-ID }
  })
}
Exportfunktion getAllAndroidPlugins() {
  return Dienst({
    URL: "/manager/getAndroidPlugin",
    Methode: 'get'
  })
}
Exportfunktion addNewAndroidPlugin(Daten) {
  return Service({
    URL: '/manager/addAndroidPlguin',
    Daten: JSON.stringify(Daten)
  })
}

Natürlich kann man die URL auch nochmal kapseln und in eine andere Datei packen. Ich halte das für sinnlos und erhöht die Komplexität zusätzlich. Das Wichtigste, worauf Sie hier achten müssen, ist das Benennungsproblem. Es wird empfohlen, es entsprechend der Funktion zu benennen. Beispielsweise verwende ich hier Anforderungsmethode + Funktion oder Inhalt + Parameter. Auf diese Weise ist auch der Name getConfigsByProductId sehr klar.

Schritt 3: Verwenden

In der Vue-Komponente

importiere {getAllAndroidPlugins,getConfigsByProductId,addNewAndroidPlugin} aus '@/api/request.js'

getAllAndroidPlugins()
.dann(res=>{

})

Globale Verwendung in main.js

importiere {Service} von '@/api/Service.js'
Vue.prototype.$axios=Dienst

Erweiterte Version

Mit dem Upgrade von vue cli wurden auch core-js\babel und andere Abhängigkeiten aktualisiert. Jetzt können Sie async/await nach Belieben verwenden. Daher dient diese Kapselung dazu, das vorherige Promise auf async await zu aktualisieren. Erstens ist es immer noch dasselbe. Kapseln Sie zuerst axios

//Dienst.js
Axios von „Axios“ importieren
const ConfigBaseURL = 'https://localhost:3000/' //Standardpfad, Sie können auch env verwenden, um die Umgebung zu bestimmen //Verwenden Sie die Methode „create“, um eine Axios-Instanz zu erstellen export const Service = axios.create({
  Timeout: 7000, // Anforderungstimeout baseURL: ConfigBaseURL,
  Methode: 'post',
  Überschriften: {
    „Inhaltstyp“: „Anwendung/json;Zeichensatz=UTF-8“
  }
})
// Anforderungs-Interceptor hinzufügen Service.interceptors.request.use(config => {
  Konfiguration zurückgeben
})
// Antwort-Interceptor hinzufügen Service.interceptors.response.use(response => {
  // console.log(Antwort)
  Antwortdaten zurückgeben
}, Fehler => {
  returniere Promise.reject(Fehler)
})

An diesem Punkt haben Sie ein Axios-Objekt erhalten. Anschließend empfehle ich eine häufig verwendete Bibliothek, die hauptsächlich zur Behandlung asynchroner Fehler verwendet wird: await-to-js. Der Code wird von oben fortgeführt.

Importieren von „await-to-js“
Exportfunktion isObj(obj) {
  const typeCheck = Typ von Objekt!=='undefined' und& Typ von Objekt === 'Objekt' und& Objekt !== null 
  Rückgabewert: typeCheck && Object.keys(obj).length > 0
}
asynchrone Exportfunktion _get(url, qs,headers) {
  Konstante Parameter = {
    URL (URL = URL = URL),
    Methode: 'get',
    Parameter: qs? qs: ''
  }
  if (header) { params.headers = headers }
  const [err, res] = warte auf (Dienst (Params))
  wenn (!err && res) {
    Rückgabewert
  } anders {
    returniere console.log(err)
  }
}

Beim Kapseln von get müssen Sie nur die Parameter berücksichtigen, „await-to-js“ verwenden, um Fehler während des Wartens zu erfassen, Daten nur bei Erfolg zurückgeben und den Interceptor verwenden, wenn ein Fehler auftritt.

asynchrone Exportfunktion _get(url, qs,headers) {
  Konstante Parameter = {
    URL (URL = URL = URL),
    Methode: 'get',
    Parameter: isObj(qs) ? qs : {}
  }
  wenn (isObj(headers)) {params.headers = headers}
  const [err, res] = warte auf (Dienst (Params))
  wenn (!err && res) {
    Rückgabewert
  } anders {
    returniere console.log(err)
  }
}

Dies ist der Beitrag, den ich verpackt habe

Exportiere asynchrone Funktion _post(URL, qs, Body) {
  Konstante Parameter = {
    URL (URL = URL = URL),
    Methode: 'post',
    Parameter: isObj(qs) ? qs : {},
    Daten: isObj(body) ? body : {}
  }
  const [err, res] = warte auf (Dienst (Params))
  wenn (!err && res) {
    Rückgabewert
  } anders {
    returniere console.log(err)
  }
}

Es kann bei Verwendung direkt eingeführt oder mehrfach eingekapselt werden

//ein.vue
<Skript>
importiere{_get}von './Service'
Standard exportieren{
	Methoden:{
    	asynchroner Test () {
        const res = warte auf _get('http://baidu.com')
       }
    }
}
</Skript>

Oben sind die Details mehrerer Methoden zur Vue-Kapselung von Axios aufgeführt. Weitere Informationen zur Vue-Kapselung von Axios finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detailliertes Beispiel für die Verwendung von Typescript zum Einkapseln von Axios in Vue3
  • So kapseln Sie Axios in Vue
  • So kapseln Sie Axios einfach in Vue
  • So kapseln Sie Axios-Anfragen mit Vue
  • Detaillierte Erklärung der AXIOS-Kapselung in Vue

<<:  Docker Swarm von der Bereitstellung bis zum grundlegenden Betrieb

>>:  Centos7.5 installiert die Bereitstellung des binären Pakets mysql5.7.24

Artikel empfehlen

Centos7.5 Konfiguration Java-Umgebung Installation Tomcat Erklärung

Tomcat ist eine auf Java basierende Webserversoft...

Analyse der grundlegenden Verwendung von ul und li

Navigation, kleine Datenmenge Tabelle, zentriert &...

Zusammenfassung zur Verwendung des MySQL-Autorisierungsbefehls „grant“

So verwenden Sie den MySQL-Autorisierungsbefehl „...

Lösen Sie das Matching-Problem in CSS

Problembeschreibung Wie wir alle wissen, wird bei...

14 Techniken für leistungsstarke Websites

Original : http://developer.yahoo.com/performance...

Einführung in die grundlegenden TypeScript-Typen

Inhaltsverzeichnis 1. Grundtypen 2. Objekttyp 2.1...

So installieren Sie PHP7.4 und Nginx auf Centos

Vorbereiten 1. Laden Sie das erforderliche Instal...

Tutorial zur Konfiguration der kostenlosen MySQL-Installationsversion

In diesem Artikel wird das kostenlose MySQL-Insta...

Zusammenfassung der Verwendung von JavaScript JSON.stringify()

Inhaltsverzeichnis 1. Nutzung 1. Grundlegende Ver...

So installieren Sie Oracle auf Windows Server 2016

1. Installieren Sie Oracle. Im Internet gibt es z...