Dieser Artikel stellt hauptsächlich die Schnittstellenanforderungskapselung basierend auf TS und AXIOS vor IdeenAbfangen von Anfragen
Antwortabfangen
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:
Abfangen von AnfragenBeginnen wir mit der detaillierten Logik. Wenn Sie eine Interception anfordern, können Sie Folgendes tun:
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 } AntwortabfangenNach Erhalt der Antwort läuft der Vorgang wie folgt ab:
// 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.tsEs 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.
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 KomponenteGeben 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> ZusammenfassenDies 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:
|
<<: Grafisches Tutorial zur Installation von VMware15.5 und Ubuntu20.04
>>: Ubuntu 20.04 stellt eine Verbindung zu WLAN her (2 Methoden)
In diesem Artikel finden Sie ein grafisches Tutor...
herunterladen: Schritt 1: Öffnen Sie die Website ...
Inhaltsverzeichnis 1. Schalter 2. While-Schleife ...
In diesem Artikel wird die Installations- und Kon...
Mit dem img-Element können wir Bilder in HTML-Dok...
Verwenden Sie natives JS, um ein neuneckiges Rast...
Inhaltsverzeichnis 1. Projektanforderungen 2. Dok...
1. Herunterladen 2. Dekompression 3. Fügen Sie di...
Ursachen und Folgen 1. Wenn Sie den Ansible-Befeh...
Zweck Machen Sie sich mit den Nginx-Modulen ngx_h...
Dieser Artikel beschreibt, wie man über Docker ei...
Detailliertes Tutorial zum Herunterladen und Inst...
Inhaltsverzeichnis Was ist ref So verwenden Sie r...
In diesem Artikel finden Sie das grafische Tutori...
Lassen Sie uns zunächst verstehen, was Docker ist...