Heim  >  Artikel  >  Web-Frontend  >  Uniapp-Anforderungskapselung

Uniapp-Anforderungskapselung

WBOY
WBOYOriginal
2023-05-22 11:09:376277Durchsuche

Mit der rasanten Entwicklung mobiler Anwendungen werden Front-End-Frameworks immer vielfältiger. Unter anderem wird Uniapp als plattformübergreifendes Entwicklungsframework auf Basis von Vue.js zunehmend in der Entwicklung mobiler Anwendungen eingesetzt.

Als Front-End-Entwickler verwenden wir bei der Entwicklung von Uniapp häufig viele APIs oder Serverschnittstellen für die Dateninteraktion. Während des Datenanforderungsprozesses müssen wir Netzwerkkommunikation, Datenformat, Datensicherheit und andere Aspekte berücksichtigen und gleichzeitig die Lesbarkeit und Wartbarkeit des Codes sicherstellen. Um diese Probleme zu lösen, können wir API-Anfragen kapseln, um die Lesbarkeit und Wartbarkeit des Codes zu verbessern.

Lassen Sie uns nun die Anforderungskapselung von Uniapp vorstellen.

1. Netzwerkanfrage

Um eine Netzwerkanfrage in uniapp zu senden, müssen Sie uni.request() verwenden. Diese Funktion ist eine asynchrone Funktion und muss mit Promise gekapselt werden. Das Folgende ist ein einfaches Kapselungsbeispiel:

export function request(method, url, data = {}) {
  return new Promise((resolve, reject) => {
    uni.request({
      method,
      url,
      data,
      header: {
        'content-type': 'application/json',
      },
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          reject(new Error(res.statusCode));
        }
      },
      fail: (err) => {
        reject(err);
      },
    });
  });
}

In dieser Kapselungsfunktion müssen wir die Anforderungsmethode, die Anforderungs-URL und die Anforderungsdaten übergeben. Darüber hinaus definiert diese Funktion auch Rückruffunktionen für Anforderungsheader, Anforderungserfolg und Anforderungsfehler.

2. Einheitliche Fehlerbehandlung

Bei der Kapselung von Anfragen müssen wir die Fehlerbehandlung in Anfragen berücksichtigen. Während des Fehlerbehandlungsprozesses können wir die Wartbarkeit des Codes verbessern, indem wir Fehlercodes einheitlich behandeln. Das Folgende ist ein häufiges Beispiel für die Verarbeitung von Fehlercodes:

export function request(method, url, data = {}) {
  return new Promise((resolve, reject) => {
    uni.request({
      method,
      url,
      data,
      header: {
        'content-type': 'application/json',
      },
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          reject(new Error(res.statusCode));
        }
      },
      fail: (err) => {
        let errorMessage = '';

        if (err.errMsg.includes('timeout')) {
          errorMessage = '请求超时,请稍后重试!';
        } else if (err.errMsg.includes('abort')) {
          errorMessage = '请求数据错误,请重试!';
        } else {
          errorMessage = '网络请求错误,请检查网络连接!';
        }

        reject(new Error(errorMessage));
      },
    });
  });
}

In dieser gekapselten Funktion definieren wir verschiedene Fehleraufforderungen, indem wir die verschiedenen Arten von Fehlercodes beurteilen. Dieser Ansatz erleichtert die Wartung des Codes.

3. Anforderungskonfiguration

Für häufig verwendete API-Schnittstellen können wir Anforderungen feinkörniger kapseln. Während des Prozesses des Sendens einer Anfrage können wir verschiedene Optionen und Parameter der Anfrage definieren, um eine flexiblere und effizientere Anfrage zu erreichen.

Das Folgende ist ein Beispiel für eine Anforderungskonfiguration:

const requestConfig = {
  baseUrl: 'https://example.com',
  timeout: 5 * 1000,
  headers: {
    'Accept-Language': 'zh-CN',
  },
};

export function request(method, url, data = {}, config = {}) {
  const {
    baseUrl = '',
    timeout = 0,
    headers = {},
  } = { ...requestConfig, ...config };

  return new Promise((resolve, reject) => {
    uni.request({
      method,
      url: `${baseUrl}${url}`,
      data,
      header: {
        ...headers,
        'content-type': 'application/json',
      },
      timeout,
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          reject(new Error(res.statusCode));
        }
      },
      fail: (err) => {
        let errorMessage = '';

        if (err.errMsg.includes('timeout')) {
          errorMessage = '请求超时,请稍后重试!';
        } else if (err.errMsg.includes('abort')) {
          errorMessage = '请求数据错误,请重试!';
        } else {
          errorMessage = '网络请求错误,请检查网络连接!';
        }

        reject(new Error(errorMessage));
      },
    });
  });
}

In dieser Kapselungsfunktion definieren wir die Basis-URL, das Anforderungszeitlimit und die Anforderungsheader. Beim Aufruf der Funktion werden die übergebenen externen Parameter entsprechend den Anforderungen zusammengeführt und der Accept-Language-Parameter zum Anforderungsheader hinzugefügt, um eine flexiblere Anforderungskonfiguration zu erreichen.

4. Request-Interceptor

In einer komplexen Anwendung müssen wir möglicherweise Anfragen abfangen. Beispielsweise müssen für jede Anfrage vor dem Senden Token-Verifizierungsinformationen zum Anfrageheader hinzugefügt werden.

Das Folgende ist ein Beispiel für einen Anfrage-Interceptor:

const requestConfig = {
  baseUrl: 'https://example.com',
  timeout: 5 * 1000,
  headers: {
    'Accept-Language': 'zh-CN',
  },
};

export function request(method, url, data = {}, config = {}) {
  const {
    baseUrl = '',
    timeout = 0,
    headers = {},
  } = { ...requestConfig, ...config };

  uni.addInterceptor('request', (options) => {
    options.header['token'] = uni.getStorageSync('token');
    return options;
  });

  return new Promise((resolve, reject) => {
    uni.request({
      method,
      url: `${baseUrl}${url}`,
      data,
      header: {
        ...headers,
        'content-type': 'application/json',
      },
      timeout,
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          reject(new Error(res.statusCode));
        }
      },
      fail: (err) => {
        let errorMessage = '';

        if (err.errMsg.includes('timeout')) {
          errorMessage = '请求超时,请稍后重试!';
        } else if (err.errMsg.includes('abort')) {
          errorMessage = '请求数据错误,请重试!';
        } else {
          errorMessage = '网络请求错误,请检查网络连接!';
        }

        reject(new Error(errorMessage));
      },
    });
  });
}

In dieser gekapselten Funktion verwenden wir die Funktion uni.addInterceptor(), um der Anfrage Token-Verifizierungsinformationen hinzuzufügen. Eine solche Kapselungsmethode kann eine einheitliche Verwaltung und Verarbeitung jeder Anfrage erreichen.

Zusammenfassung

Als Frontend-Entwickler waren Codelesbarkeit und Wartbarkeit schon immer ein unverzichtbares Thema. In uniapp sollten wir dieses Ziel erreichen, indem wir API-Anfragen kapseln, um die Wiederverwendbarkeit und Lesbarkeit des Codes so weit wie möglich zu verbessern. Gleichzeitig optimieren wir bei Verpackungsanfragen die Verpackungsmethode entsprechend den tatsächlichen Anforderungen jedes Projekts, um effizientere Anforderungsvorgänge zu erreichen.

Das obige ist der detaillierte Inhalt vonUniapp-Anforderungskapselung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn