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

Bereitstellung und Konfiguration des Apache-Dienstes unter Linux

Inhaltsverzeichnis 1 Die Rolle von Apache 2 Apach...

Kreativer Eröffnungseffekt durch die Kombination von CSS 3.0 mit Video

Ich möchte Ihnen einen kreativen Einstieg vorstel...

Detaillierte Schritte zur Installation des NERDTree-Plugins in Vim unter Ubuntu

NERDTree ist ein Dateisystembrowser für Vim. Mit ...

Analyse und Beschreibung von Netzwerkkonfigurationsdateien unter Ubuntu-System

Ich bin heute auf ein seltsames Netzwerkproblem g...

Wann verwendet man Tabellen und wann CSS (Erfahrungsaustausch)

Die Haupttextseite von TW hatte früher eine Breite...

Fallstudie zum Unterschied zwischen JavaScript parseInt() und Number()

Lernziele: Die beiden Funktionen parseInt() und N...

HTML CSS3 streckt den Bildanzeigeeffekt nicht

1. Verwenden Sie das Transform-Attribut, um das B...

Einführung in die reaktive Funktion toRef-Funktion ref-Funktion in Vue3

Inhaltsverzeichnis Reaktive Funktion Verwendung: ...

So optimieren Sie den MySQL-Deduplizierungsvorgang maximal

Inhaltsverzeichnis 1. Clevere Verwendung von Indi...

So kompilieren und installieren Sie xdebug in einer Ubuntu-Umgebung

Dieser Artikel beschreibt, wie xdebug in einer Ub...