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

Allgemeine JavaScript-Anweisungen: Schleife, Beurteilung, Zeichenfolge in Zahl

Inhaltsverzeichnis 1. Schalter 2. While-Schleife ...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.20 (Win10)

In diesem Artikel wird die Installations- und Kon...

【HTML-Element】So betten Sie Bilder ein

Mit dem img-Element können wir Bilder in HTML-Dok...

Native js realisiert das Ziehen und Ablegen des Neun-Quadrat-Rasters

Verwenden Sie natives JS, um ein neuneckiges Rast...

So zeigen Sie in CocosCreator eine Textur an der Wischposition an

Inhaltsverzeichnis 1. Projektanforderungen 2. Dok...

Kostenlose Installationskonfigurationsmethode für MySQL 5.7.18 WinX64

1. Herunterladen 2. Dekompression 3. Fügen Sie di...

Detaillierte Erklärung der Kontrolle des Zugriffsvolumens durch Nginx

Zweck Machen Sie sich mit den Nginx-Modulen ngx_h...

So erstellen Sie Ihren eigenen privaten Nexus-Server unter Linux

Dieser Artikel beschreibt, wie man über Docker ei...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.19 (Win10)

Detailliertes Tutorial zum Herunterladen und Inst...

Beispiele für die Verwendung von React Ref

Inhaltsverzeichnis Was ist ref So verwenden Sie r...

MySQL 8.0.16 Installations- und Konfigurations-Tutorial unter Windows 10

In diesem Artikel finden Sie das grafische Tutori...

Eine einfache Möglichkeit zum Erstellen einer Docker-Umgebung

Lassen Sie uns zunächst verstehen, was Docker ist...