Detaillierte Erläuterung des Schnittstellenanforderungsmanagements basierend auf Typescript und Axios

Detaillierte Erläuterung des Schnittstellenanforderungsmanagements basierend auf Typescript und Axios

Dieser Artikel stellt hauptsächlich die Schnittstellenanforderungskapselung basierend auf TS und AXIOS vor

Ideen

Abfangen von Anfragen

  • Fügen Sie dem Anforderungsheader einige Parameter hinzu, z. B. Token, UID usw.
  • Ermitteln Sie den Anmeldestatus des Benutzers. Wenn Sie nicht angemeldet sind, springen Sie direkt zur Anmeldung
  • Verarbeiten Sie die Anforderungsdaten und konvertieren Sie das Datenformat der zu sendenden Anforderung, json→urlencoded (optional).

Antwortabfangen

  • Bestimmen Sie den Geschäftsstatuscode der Backend-Antwort und führen Sie verschiedene Verarbeitungsvorgänge durch
    • Wenn beispielsweise der Anmeldestatus des Benutzers abläuft, springen Sie direkt zum Login
    • Einheitliche Fehlerberichterstattung

Schreiben Sie zuerst den Routinecode:

importiere Axios, {
    AxiosInstance,
    AxiosResponse,
    AxiosRequestConfig,
    AxiosError
} von 'axios'
exportiere standardmäßige abstrakte Klasse HttpClient {
    geschützte schreibgeschützte Instanz: AxiosInstance

    öffentlicher Konstruktor(baseURL = '/api', timeout = 1000 * 120) {
        diese.Instanz = axios.create({
            Basis-URL,
            Time-out
        })
        // 1. Interceptor anfordern this._initializeRequestInterceptor()
        // 2. Antwort-Interceptor this._initializeResponseInterceptor()
    }
    private _initializeRequestInterceptor = () => {
        diese.Instanz.Interceptors.Anfrage.Verwenden(
            diese._handleRequest,
            this._handleError
        )
    }
    private _handleRequest = (Konfiguration: AxiosRequestConfig) => {}
   
    private _initializeResponseInterceptor = () => {
        diese.Instanz.Interceptors.Response.Verwendung(
            diese._handleResponse,
            this._handleError
        )
    }
    private _handleResponse = (Antwort: AxiosResponse) => {}
    geschützt _handleError = (Fehler: AxiosError) => Promise.reject(Fehler)
}

Um den obigen Code kurz zu erklären: Wir haben eine HttpClient-Klasse für die Anforderungsschnittstelle erstellt, die Basis-URL und das Timeout im Konstruktor definiert und die Anforderungs- und Antwortabfangmethode definiert.

An dieser Stelle läuft der Prozess zum Initiieren einer Schnittstelle wie folgt ab:

  1. Rufen Sie vor dem Senden der Anforderung die Anforderungsabfangfunktion auf
  2. Sendeschnittstelle, Netzwerkanfrage erscheint
  3. Schnittstellenantwort, Abfangen von Anrufantworten
  4. Reagieren Sie auf das Front-End-Programm und führen Sie die entsprechende Logik aus

Abfangen von Anfragen

Beginnen wir mit der detaillierten Logik. Wenn Sie eine Interception anfordern, können Sie Folgendes tun:

  1. Fügen Sie dem Anforderungsheader einige Parameter hinzu, z. B. Token, UID usw.
  2. Ermitteln Sie den Anmeldestatus des Benutzers. Wenn Sie nicht angemeldet sind, springen Sie direkt zur Anmeldung
  3. Verarbeiten Sie die Anforderungsdaten und konvertieren Sie das Datenformat der zu sendenden Anforderung, json→urlencoded (optional).
     private _handleRequest = (Konfiguration: AxiosRequestConfig) => {
        //1. Fügen Sie einen benutzerdefinierten Anforderungsheader hinzu: config.headers['Authorization'] = 'my token'
        config.headers['mobile'] = 'mein Handy'
        // 2. Bestimmen Sie, ob Sie sich anmelden möchten (bestimmen Sie, ob ein Token vorhanden ist)
        
        //3. Datenformat konvertieren config.data = qs.stringify(config.data)
        Konfiguration zurückgeben
    }

Antwortabfangen

Nach Erhalt der Antwort läuft der Vorgang wie folgt ab:

  • Bestimmen Sie den Geschäftsstatuscode der Backend-Antwort und führen Sie verschiedene Verarbeitungsvorgänge durch
    • Wenn der Anmeldestatus des Benutzers abläuft, springen Sie direkt zum Login
    • Einheitliche Fehlerberichterstattung
  • Token speichern
 // Antwort-Interceptor private _handleResponse = (Antwort: AxiosResponse) => {
        const { Daten, Header } = Antwort

        //1.--Verarbeiten Sie das Antworttoken und speichern Sie das Token
        const token = headers['autorisierung']
        wenn (Token) {
            dies._saveToken(Token)
        }
       
        //2. --Verarbeite den Antwortcode. Hier versuche es mit einem Catch. Wenn einige Backend-Schnittstellen keinen Code zurückgeben, kehre direkt zu try { zurück.
            const code = daten.code,
            Nachricht = data.desc || data.msg
            const isSucceed = this._handleResCode(Code, Nachricht, URL)
            wenn (ist erfolgreich) {
                returniere Promise.resolve(Daten)
            } anders {
                returniere Promise.reject(Nachricht)
            }
        } Fehler abfangen {
            returniere Promise.resolve(Daten)
        }
       
    }
    //Token speichern
    private _saveToken(Token: Zeichenfolge) {
        const USER = getModule(BenutzerModul)
        USER.setToken(Token)
    }
    private _handleResCode(Code: Nummer, Nachricht: Zeichenfolge, URL: Zeichenfolge) {
        wenn (Code === 0) {
            //Anfrage erfolgreich return true
        } sonst wenn (Code===4000) {
            // Token läuft ab, springe zurück zur Anmeldeoberfläche Vue.prototype.$message.error('Identitätsinformationen abgelaufen, bitte melden Sie sich erneut an')
            router.push({ Name: 'login' })
            return false
        } anders {
            // In anderen Fällen sind alle Eingabeaufforderungen Nachrichteninformationen Vue.prototype.$message.error(message)
            return false
        }
    }

Definieren Sie die Anforderung mit httpClient.ts

Es wird empfohlen, anforderungsbezogene Dateien wie folgt im Verzeichnis @/api zu definieren

httpClient.ts
Benutzer.ts
uti.ts

Definieren Sie die Anforderung in der entsprechenden Datei.

  1. Alle Anforderungsklassen müssen die HttpClient-Klasse erben. HttpClient führt einige einheitliche Abfang- und Verarbeitungsvorgänge für Anforderungen und Antworten durch.
  2. Die Daten der Anfrageantwort müssen einen Typ aufweisen, der in der Datei @/types/xxx definiert ist. Ein Modul entspricht einer Datei. Nur wenn der Typ angegeben ist, gibt es Codehinweise
importiere HttpClient aus './HttpClient'
importiere { AlarmItemType } aus '../types/test'
importiere { BaseResType } von '../types/index'

Klasse UtilApi erweitert HttpClient {
   //Beispielsweise wird die vom Hintergrund zurückgegebene Antwort res={code:xxx,data:xxx,token:xxx,desc:xxx}
    //Zuerst müssen Sie den Typ von res.data definieren, der der erste Parameter von get ist, AlarmItemType
    //Dann müssen Sie den Typ der gesamten Antwort definieren, nämlich BaseResType<AlarmItemType>
    public getAlarmById = (id: Zeichenfolge) =>
        this.instance.get<AlarmItemType, BaseResType<AlarmItemType>>(
            `/realtime/alarms/queryByAlarmId/${id}`
        )
}

exportiere const UTIL_API = neue UtilApi()

Anfordern einer Schnittstelle in einer Komponente

Geben Sie das Schlüsselwort des Anforderungsmoduls in die Komponente ein, an die Sie eine Anforderung senden müssen, z. B. USER_API. Wenn das TypeScript Importer-Plugin installiert ist, wird eine entsprechende Eingabeaufforderung zum Importieren des Moduls angezeigt. Drücken Sie zu diesem Zeitpunkt die Eingabetaste, um das entsprechende Modul zu importieren.

<Vorlage>
    <section>Anforderungsdaten:{{ alarmData }}</section>
</Vorlage>

<script lang="ts">
importiere { UTIL_API } von '@/api/utilApi'
importiere { Vue, Komponente } von 'vue-property-decorator'
@Komponente({
    Komponenten: {}
})
exportiere Standardklasse TestRequest erweitert Vue {
    alarmData = {}
    async getAlarmData() {
        const res = warte auf UTIL_API.getAlarmById('alarmIdc7e9bd47')
        wenn (res.code == 0) {
            this.$message.success('Anfrage erfolgreich')
            diese.alarmData = res.data
        }
    }
    montiert() {
        dies.getAlarmData()
    }
}
</Skript>
<style lang="scss" scoped></style>

Zusammenfassen

Dies ist das Ende dieses Artikels zur Verwaltung von Schnittstellenanforderungen basierend auf Typescript und Axios. Weitere verwandte Inhalte zu Schnittstellenanforderungen von Typescript und Axios finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Fallbeispiel zur TypeScript-Schnittstellendefinition
  • Generische TypeScript-Verwendung und generische Schnittstellenkombination
  • Einführung in TypeScript-Schnittstellen
  • TypeScript-Einführung - Schnittstelle
  • Detaillierte Erklärung der Schnittstellen in TypeScript
  • TypeScript Core Foundation-Schnittstelle

<<:  Grafisches Tutorial zur Installation von VMware15.5 und Ubuntu20.04

>>:  Ubuntu 20.04 stellt eine Verbindung zu WLAN her (2 Methoden)

Artikel empfehlen

So installieren Sie MySQL über Yum auf CentOS7

1. Überprüfen Sie, ob MySQL installiert ist Yum-L...

Einfache Schritte zum Schreiben benutzerdefinierter Anweisungen in Vue3.0

Vorwort Vue bietet eine Fülle integrierter Anweis...

Detaillierte Analyse von MySQL-Deadlock-Problemen

Vorwort Wenn sich unser Geschäft in einem sehr fr...

Detaillierte Erläuterung gängiger Methoden von JavaScript String

Inhaltsverzeichnis 1. charAt Grammatik Parameter ...

Zusammenfassung der Wissenspunkte zum CSS-Frontend (unbedingt lesen)

1. Das Konzept von CSS: (Cascading Style Sheet) V...

Detaillierte Einführung in das MySQL-Installationstutorial unter Windows

Inhaltsverzeichnis 1. Einige Konzepte, die Sie vo...

Tipps zur Konvertierung von MySQL-Spalten in Zeilen (teilen)

Vorwort: Weil viele Geschäftstabellen Entwurfsmus...

Zwei Möglichkeiten zum Deklarieren privater Variablen in JavaScript

Vorwort JavaScript unterscheidet sich von anderen...

MySQL 5.7.18 MSI-Installations-Grafik-Tutorial

In diesem Artikel wird das MySQL 5.7.18 MSI-Insta...

Detaillierte grafische Erklärung zum Löschen des Keep-Alive-Cache

Inhaltsverzeichnis Eröffnungsszene Direktes Rende...

Lösung für das Routing-Hervorhebungsproblem von Vue-Komponenten

Vorwort Früher habe ich den Cache verwendet, um d...

18 Killer-JavaScript-Einzeiler

Vorwort JavaScript erfreut sich weiterhin wachsen...

Detaillierte Erklärung der Vue-Optionen

Inhaltsverzeichnis 1. Was sind Optionen? 2. Welch...