国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue3+TS版本Uniapp:封裝uni.request請求配置

這篇具有很好參考價值的文章主要介紹了Vue3+TS版本Uniapp:封裝uni.request請求配置。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

作者:前端小王hs

阿里云社區(qū)博客專家/清華大學(xué)出版社簽約作者?/CSDN百萬訪問博主/B站千粉前端up主

封裝攔截器

uniapp的封裝邏輯不同于Vue3項目中直接使用axios.create()方法創(chuàng)建實例(在create方法中寫入請求的地址、請求頭、超時等內(nèi)容),代碼如下:

const instance = axios.create({
	// 后端url地址
	baseURL: import.meta.env.VITE_API_BASEURL,
	timeout: 6000, //設(shè)置超時
	headers: {
		'Content-Type': 'application/x-www-form-urlencoded'
	}
});

PS:上述代碼來自博主在B站的Vue3全家桶+MySQL+Express全棧實戰(zhàn)項目源碼

uniapp中,需要使用到一個官方的APIuni.addInterceptor(STRING, OBJECT),這是一個用于攔截作用的API,在規(guī)范開發(fā)的過程中,會在請求之前為請求的內(nèi)容拼接url、超時和請求頭等信息,這一點在官方文檔API的基礎(chǔ)攔截器一文中詳細(xì)的示例,代碼如下:

uni.addInterceptor('request', {
  invoke(args) {
    // request 觸發(fā)前拼接 url 
    args.url = 'https://www.example.com/'+args.url
  },
  success(args) {
    // 請求成功后,修改code值為1
    args.data.code = 1
  }, 
  fail(err) {
    console.log('interceptor-fail',err)
  }, 
  complete(res) {
    console.log('interceptor-complete',res)
  }
})

所以可以封裝一個攔截器的配置項,為所有的uni.request添加請求前置信息,代碼如下:

const baseURL = import.meta.env.VITE_API_BASEURL
// 添加攔截器
const httpInterceptor = {
  // 攔截前觸發(fā)
  invoke(options: UniApp.RequestOptions) {
    // 假設(shè)開頭為非http的請求url地址
    if (!options.url.startsWith('http')) {
      options.url = baseURL + options.url
    }
    // 請求超時
    options.timeout = 6000
    options.header = {
      ...options.header,
      // 自定義標(biāo)識符,用于后端區(qū)分app、后臺或其他渠道請求
      'source-client': 'app',
    }
    // 添加 token 請求頭標(biāo)識
    const token = uni.getStorage('token')
    if (token) {
      options.header.Authorization = token
    }
  },
}

uni.addInterceptor('request', httpInterceptor)

這是一段萬能的uniapp封裝攔截器代碼,讀者可收藏此文章粘貼即用,下同

封裝uni.request

這里的封裝,參考了axios返回promise對象的實現(xiàn)邏輯,在接口中return一個promise對象,便于在實際環(huán)境中更好的獲取數(shù)據(jù)以及進一步處理數(shù)據(jù),代碼如下:

type Data<T> = {
	// 后端返回的通用響應(yīng)結(jié)構(gòu)
	statusCode: string
	msg: string
	result: T
}
// UniApp.RequestOptions為配置網(wǎng)絡(luò)請求的選項
// 這里使用了泛型,便于自定義響應(yīng)結(jié)構(gòu)
export const http = <T>(options: UniApp.RequestOptions) => {  
  return new Promise<Data<T>>((resolve, reject) => {  
    uni.request({  
      // 攔截器配置內(nèi)容
      ...options,
      success(res) {
      	// 成功響應(yīng)
        handleResponse(res, resolve, reject);
      }, 
      fail(err) { 
        handleError(err, reject);
      },  
    });  
  };  
};  

// resolve和reject不返回任何值,但通知promise更改狀態(tài)
const handleResponse = <T>(res: any, resolve: (value: Data<T>) => void, reject: (reason?: any) => void) => {
  // 分離了驗證狀態(tài)碼邏輯
  if (isSuccessStatusCode(res.statusCode)) {  
    resolve(res.data as Data<T>);
  // 登錄失敗
  } else if (res.statusCode === 401) {  
    // 假設(shè) clearUserInfo 是清除用戶信息的函數(shù) 
    clearUserInfo();
    // 跳轉(zhuǎn)至登錄頁面
    uni.navigateTo({ url: '/pages/login/index' });
    reject(res);
  } else {
  	// 分離了報錯狀態(tài)碼邏輯
    showErrorToast(res.data as Data<T>); 
    reject(res);
  }  
};  
  
const handleError = (err: any, reject: (reason?: any) => void) => {
  uni.showToast({
    icon: 'none',  
    title: '網(wǎng)絡(luò)可能開小差了~',  
  });
  reject(err);
};
  
const isSuccessStatusCode = (statusCode: number) => {
  return statusCode >= 200 && statusCode < 300;
};
  
const showErrorToast = <T>(data: Data<T>) => {
  uni.showToast({
    icon: 'none',
    title: data.msg || '請求錯誤',
  });
};

關(guān)于RequestOptions更多的信息,可以對其ctrl+點擊查看內(nèi)置的接口信息,如下圖所示:
vue3封裝uniapp的api請求,uniapp+nest,uni-app,前端,javascript,vue,前端小王hs,小程序,微信小程序文章來源地址http://www.zghlxwxcb.cn/news/detail-855321.html

到了這里,關(guān)于Vue3+TS版本Uniapp:封裝uni.request請求配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【uniapp&微信小程序】封裝uni.request()

    【uniapp&微信小程序】封裝uni.request()

    前言 ? ? ? ? 在項目開發(fā)過程中,往往需要對請求進行二次封裝,這篇文章將對uni.request()進行二次封裝,并實現(xiàn)多個環(huán)境的請求配置,對請求方式,數(shù)據(jù)格式等進行封裝,將請求做到最簡化。 一.封裝uni.request() 第一步基于 uni.request() 進行二次封裝,集成項目開發(fā)中需要的參

    2024年02月09日
    瀏覽(25)
  • uniapp封裝request請求

    uniapp封裝request請求

    在基礎(chǔ)文件里面創(chuàng)建一個api文件 在創(chuàng)建兩個 js文件 ?http.js 里面封裝?request 請求 在?service.js 封裝要調(diào)用的接口 在頁面 引入接口文件

    2024年02月14日
    瀏覽(18)
  • uni-app 使用uni.request封裝發(fā)送api請求文檔服務(wù)器請求導(dǎo)航守衛(wèi)

    前言 剛剛接觸uni-app時候想著直接使用axios發(fā)請求,可以發(fā)送成功但是請求頭有點問題 后面發(fā)現(xiàn)教程都是使用@escookrequest-miniprogram三方包發(fā)送請求-(瀏覽器環(huán)境發(fā)送不了請求,不兼容) 為什么不直接用uni.request()發(fā)送請求,是因為每次請求都要寫一次添加請求頭不合理 后面

    2024年02月16日
    瀏覽(29)
  • vite+vue3+ts項目構(gòu)建詳細(xì)步驟(配置多語言版本)

    vite+vue3+ts項目構(gòu)建詳細(xì)步驟(配置多語言版本)

    時過境遷,我們見證了諸如 webpack、Rollup 和 Parcel 等工具的變遷,它們極大地改善了前端開發(fā)者的開發(fā)體驗。 然而,當(dāng)我們開始構(gòu)建越來越大型的應(yīng)用時,需要處理的 JavaScript 代碼量也呈指數(shù)級增長。包含數(shù)千個模塊的大型項目相當(dāng)普遍。基于 JavaScript 開發(fā)的工具就會開始遇

    2024年02月05日
    瀏覽(24)
  • 【尚醫(yī)通】vue3+ts前端項目開發(fā)筆記 2 —— 創(chuàng)建項目、封裝網(wǎng)絡(luò)請求、集成elment-plus 、重置樣式、準(zhǔn)備狀態(tài)管理/路由 等開發(fā)前準(zhǔn)備

    【尚醫(yī)通】vue3+ts前端項目開發(fā)筆記 2 —— 創(chuàng)建項目、封裝網(wǎng)絡(luò)請求、集成elment-plus 、重置樣式、準(zhǔn)備狀態(tài)管理/路由 等開發(fā)前準(zhǔn)備

    服務(wù)器地址:http://syt.atguigu.cn 醫(yī)院接口:http://139.198.34.216:8201/swagger-ui.html 公共數(shù)據(jù)接口:http://139.198.34.216:8202/swagger-ui.html 會員接口:http://139.198.34.216:8203/swagger-ui.html 短信驗證碼接口:http://139.198.34.216:8204/swagger-ui.html 訂單接口:http://139.198.34.216:8206/swagger-ui.html 文件上傳接口:

    2024年02月13日
    瀏覽(19)
  • uniapp+vite+vue3+ts配置eslint代碼檢查及prettier規(guī)范檢查

    uniapp+vite+vue3+ts配置eslint代碼檢查及prettier規(guī)范檢查

    首先要知道eslint與prettier的區(qū)別,ESLint 是一個用于檢測?JavaScript?代碼中的錯誤和潛在問題的工具。它只關(guān)注你寫的代碼是否正確,不會管你代碼的格式;Prettier 則是一個代碼格式化工具,它旨在確保代碼在縮進、空格、換行、引號和分號等格式化方面遵循一致的規(guī)則,在

    2024年03月16日
    瀏覽(42)
  • 小程序-uni-app:uni-app-base項目基礎(chǔ)配置及使用/uni-app+vue3+ts+vite+vscode

    小程序-uni-app:uni-app-base項目基礎(chǔ)配置及使用/uni-app+vue3+ts+vite+vscode

    目前(20230605)uni-app最新版本(3.8.4.20230531) 一、官網(wǎng)文檔 微信開放文檔 uni-app官網(wǎng) 二、創(chuàng)建項目 項目目標(biāo):vue3+ts+vite+vscode 創(chuàng)建以 typescript 開發(fā)的工程(如命令行創(chuàng)建失敗,請直接訪問?gitee?下載模板) npx degit dcloudio/uni-preset-vue#vite-ts uniapp-base ? 本文創(chuàng)建成功 ? 為了驗

    2024年02月15日
    瀏覽(91)
  • 小程序-uni-app:uni-app-base項目基礎(chǔ)配置及使用 / uni-app+vue3+ts+vite+vscode

    小程序-uni-app:uni-app-base項目基礎(chǔ)配置及使用 / uni-app+vue3+ts+vite+vscode

    目前(20230605)uni-app最新版本(3.8.4.20230531) 一、官網(wǎng)文檔 微信開放文檔 uni-app官網(wǎng) 二、創(chuàng)建項目 項目目標(biāo):vue3+ts+vite+vscode 創(chuàng)建以 typescript 開發(fā)的工程(如命令行創(chuàng)建失敗,請直接訪問?gitee?下載模板) npx degit dcloudio/uni-preset-vue#vite-ts uniapp-base ? 本文創(chuàng)建成功 ? 為了驗

    2024年02月05日
    瀏覽(3535)
  • uni-app封裝request請求及get、post、put等方法

    直接上代碼 request.js文件 export default { ? common: { ? ? baseUrl: \\\"http://172.20.4.212:3000/api\\\", ? ? data: {}, ? ? header: { ? ? ? \\\"Content-Type\\\": \\\"application/json\\\", ? ? ? \\\"Content-Type\\\": \\\"application/x-www-form-urlencoded\\\" ? ? }, ? ? method: \\\"GET\\\", ? ? dataType: \\\"json\\\" ? }, ? request (options = {}) { ? ? uni.showLoading({ ?

    2024年02月09日
    瀏覽(21)
  • 【uniapp】uni.request請求跨域問題解決方案

    【uniapp】uni.request請求跨域問題解決方案

    例如,運行H5頁面,請求一個地址資源,如果不是本站地址,瀏覽器就會報跨域錯誤,這樣訪問受限 例如,項目代碼里是這樣寫的,運行H5測試 因為 https://gitcode.net 不是本站地址,根據(jù)瀏覽器同源策略,是會報跨域錯誤, 打開項目的 manifest.json 文件,以源碼視圖查看,添加以

    2024年02月05日
    瀏覽(98)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包