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

Auf Wiedersehen Docker: So wechseln Sie in 5 Minuten zu Containerd

Docker ist eine sehr beliebte Containertechnologi...

Zusammenfassung gängiger Nginx-Techniken und Beispiele

1. Priorität mehrerer Server Wenn beispielsweise ...

Detaillierte Beispiele für Ersetzen und Ersetzen in MySQL into_Mysql

„Replace“ und „Replace into“ von MySQL sind beide...

Verwendung von „Select“, „Distinct“ und „Limit“ in MySQL

Inhaltsverzeichnis 1. Einleitung 2. auswählen 2.1...

Eine kurze Analyse der Verwendung von USING und HAVING in MySQL

Dieser Artikel veranschaulicht anhand von Beispie...

Node+Socket realisiert einfache Chatroom-Funktion

In diesem Artikel wird der spezifische Code von N...

Zwei Abfragemethoden, wenn der MySQL-Abfragefeldtyp JSON ist

Die Tabellenstruktur ist wie folgt: Ich würde var...

Detailliertes Tutorial zur Installation von MySQL unter Linux

1. Beenden Sie den MySQL-Dienst # service mysqld ...

JavaScript erklärt die Kapselung und Verwendung von Zeitlupenanimationen

Durchführung von Prozessanalysen (1) Wie rufe ich...

5 einfache Möglichkeiten, Speicherplatz auf Ubuntu freizugeben

Vorwort Die meisten Benutzer führen diesen Vorgan...

Detaillierte Erklärung inkompatibler Änderungen von Komponenten in vue3

Inhaltsverzeichnis Funktionale Komponenten So sch...