Rumah hujung hadapan web uni-app enkapsulasi permintaan uniapp

enkapsulasi permintaan uniapp

May 22, 2023 am 11:09 AM

Dengan perkembangan pesat aplikasi mudah alih, rangka kerja bahagian hadapan menjadi semakin pelbagai. Antaranya, uniapp, sebagai rangka kerja pembangunan merentas platform berdasarkan Vue.js, semakin digunakan dalam pembangunan aplikasi mudah alih.

Sebagai pembangun bahagian hadapan, apabila kami membangunkan uniapp, kami sering menggunakan banyak API atau antara muka pelayan untuk interaksi data. Semasa proses permintaan data, kami perlu mempertimbangkan komunikasi rangkaian, format data, keselamatan data dan isu-isu lain, sambil memastikan kebolehbacaan dan kebolehselenggaraan kod. Untuk menangani masalah ini, kami boleh merangkum permintaan API untuk meningkatkan kebolehbacaan dan kebolehselenggaraan kod.

Mari perkenalkan enkapsulasi permintaan uniapp.

1. Permintaan rangkaian

Untuk menghantar permintaan rangkaian dalam uniapp, anda perlu menggunakan uni.request(). Berikut ialah contoh enkapsulasi mudah:

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);
      },
    });
  });
}
Salin selepas log masuk

Dalam fungsi enkapsulasi ini, kita perlu menghantar kaedah permintaan, URL permintaan dan data permintaan. Selain itu, fungsi ini juga mentakrifkan pengepala permintaan, fungsi panggil balik untuk kejayaan permintaan dan kegagalan permintaan.

2. Pengendalian ralat bersatu

Dalam proses merangkum permintaan, kita perlu mempertimbangkan pengendalian ralat dalam permintaan. Semasa proses pengendalian ralat, kami boleh meningkatkan kebolehselenggaraan kod dengan mengendalikan kod ralat secara seragam. Berikut ialah contoh pemprosesan kod ralat biasa:

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));
      },
    });
  });
}
Salin selepas log masuk

Dalam fungsi terkapsul ini, kami mentakrifkan mesej gesaan ralat yang berbeza dengan menilai jenis kod ralat yang berbeza. Pendekatan ini menjadikan kod lebih mudah untuk diselenggara.

3. Permintaan konfigurasi

Untuk antara muka API yang kerap digunakan, kami boleh merangkum permintaan dengan cara yang lebih terperinci. Semasa proses menghantar permintaan, kami boleh menentukan pelbagai pilihan dan parameter permintaan untuk mencapai permintaan yang lebih fleksibel dan cekap.

Berikut ialah contoh konfigurasi permintaan:

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));
      },
    });
  });
}
Salin selepas log masuk

Dalam fungsi enkapsulasi ini, kami mentakrifkan URL asas, permintaan tamat masa dan pengepala permintaan. Apabila memanggil fungsi, parameter luaran yang diluluskan akan digabungkan mengikut keperluan, dan parameter Accept-Language ditambahkan pada pengepala permintaan untuk mencapai konfigurasi permintaan yang lebih fleksibel.

4. Minta pemintas

Dalam aplikasi yang rumit, kami mungkin perlu memintas permintaan. Sebagai contoh, untuk setiap permintaan, maklumat pengesahan token perlu ditambahkan pada pengepala permintaan sebelum dihantar.

Berikut ialah contoh pemintas permintaan:

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));
      },
    });
  });
}
Salin selepas log masuk

Dalam fungsi terkapsul ini, kami menggunakan fungsi uni.addInterceptor() untuk menambah maklumat pengesahan token pada permintaan. Kaedah enkapsulasi sedemikian boleh mencapai pengurusan bersatu dan pemprosesan setiap permintaan.

Ringkasan

Sebagai pembangun bahagian hadapan, kebolehbacaan dan kebolehselenggaraan kod sentiasa menjadi isu yang sangat diperlukan. Dalam uniapp, kita harus mencapai matlamat ini dengan merangkum permintaan API untuk meningkatkan kebolehgunaan semula kod dan kebolehbacaan kod sebanyak mungkin. Pada masa yang sama, dalam permintaan pembungkusan, kami mengoptimumkan kaedah pembungkusan mengikut keperluan sebenar setiap projek untuk mencapai operasi permintaan yang lebih cekap.

Atas ialah kandungan terperinci enkapsulasi permintaan uniapp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana saya menggunakan API perkongsian sosial Uni-app? Bagaimana saya menggunakan API perkongsian sosial Uni-app? Mar 13, 2025 pm 06:30 PM

Artikel ini memperincikan bagaimana untuk mengintegrasikan perkongsian sosial ke dalam projek Uni-app menggunakan API Uni.share, meliputi persediaan, konfigurasi, dan ujian di seluruh platform seperti WeChat dan Weibo.

Bagaimanakah saya menggunakan preprocessors (sass, kurang) dengan uni-app? Bagaimanakah saya menggunakan preprocessors (sass, kurang) dengan uni-app? Mar 18, 2025 pm 12:20 PM

Artikel membincangkan menggunakan SASS dan kurang preprocessors dalam UNI-APP, memperincikan persediaan, faedah, dan penggunaan dwi. Fokus utama adalah pada konfigurasi dan kelebihan. [159 aksara]

Apakah jenis ujian yang boleh anda lakukan dalam aplikasi UNIAPP? Apakah jenis ujian yang boleh anda lakukan dalam aplikasi UNIAPP? Mar 27, 2025 pm 04:59 PM

Artikel ini membincangkan pelbagai jenis ujian untuk aplikasi UNIAPP, termasuk unit, integrasi, fungsional, UI/UX, prestasi, silang platform, dan ujian keselamatan. Ia juga meliputi memastikan keserasian silang platform dan mengesyorkan alat seperti JES

Bagaimana saya menggunakan API Animasi Uni-App? Bagaimana saya menggunakan API Animasi Uni-App? Mar 18, 2025 pm 12:21 PM

Artikel ini menerangkan cara menggunakan API Animasi Uni-App, memperincikan langkah-langkah untuk membuat dan menggunakan animasi, fungsi utama, dan kaedah untuk menggabungkan dan mengawal masa animasi.

Bagaimanakah anda dapat mengurangkan saiz pakej aplikasi UNIAPP anda? Bagaimanakah anda dapat mengurangkan saiz pakej aplikasi UNIAPP anda? Mar 27, 2025 pm 04:45 PM

Artikel ini membincangkan strategi untuk mengurangkan saiz pakej UNIAPP, memberi tumpuan kepada pengoptimuman kod, pengurusan sumber, dan teknik seperti pemisahan kod dan pemuatan malas.

Bagaimana saya menggunakan API Penyimpanan Uni-App (uni.setstorage, uni.getstorage)? Bagaimana saya menggunakan API Penyimpanan Uni-App (uni.setstorage, uni.getstorage)? Mar 18, 2025 pm 12:22 PM

Artikel ini menerangkan cara menggunakan API penyimpanan Uni-App (uni.setstorage, uni.getstorage) untuk pengurusan data tempatan, membincangkan amalan terbaik, penyelesaian masalah, dan menyoroti batasan dan pertimbangan untuk kegunaan yang berkesan.

Apakah struktur fail projek uni-app? Apakah struktur fail projek uni-app? Mar 14, 2025 pm 06:55 PM

Artikel ini memperincikan struktur fail projek uni-app, menerangkan direktori utama seperti biasa, komponen, halaman, statik, dan unicloud, dan fail penting seperti app.vue, main.js, manifest.json, halaman.json, dan uni.scss. Ia membincangkan bagaimana ini o

Apakah alat penyahpepijatan yang tersedia untuk pembangunan Uniapp? Apakah alat penyahpepijatan yang tersedia untuk pembangunan Uniapp? Mar 27, 2025 pm 05:05 PM

Artikel ini membincangkan alat penyahpepijatan dan amalan terbaik untuk pembangunan UNIPP, yang memberi tumpuan kepada alat seperti HBuildex, WeChat Developer Tools, dan Chrome Devtools.

See all articles