uni-app封裝api請求

前端封裝api請求

前端封裝 API 請求可以提高代碼的可維護性和重用性,同時使得 API 調用更加簡潔和易用。

下面是一種常見的前端封裝 API 請求的方式:

  1. 創建一個 API 封裝模塊或類:可以使用 JavaScriptTypeScript 創建一個獨立的模塊或類來封裝 API 請求。這個模塊或類可以包含一些常用的方法,例如?getpost?等,用于發送不同類型的請求。

  2. 配置基本信息:在封裝模塊中,設置 API 的基本信息,例如 API 的根地址、請求頭等。可以定義一些默認配置,也可以允許開發者在調用時傳入自定義配置。

  3. 實現請求方法:根據需要,實現不同的請求方法,例如?getpostputdelete?等。這些方法通常接收參數(例如 URL、數據、請求頭等),并返回一個 Promise 對象,以便在異步請求完成后獲取數據或處理錯誤。

  4. ?處理請求和響應攔截:在請求發送前,可以對請求進行一些預處理,例如添加統一的請求頭、身份驗證等。在響應返回后,也可以對響應進行攔截和處理,例如判斷狀態碼、處理錯誤信息等。

  5. ?錯誤處理:在封裝的 API 模塊中,可以統一處理請求錯誤。例如,對于網絡錯誤或服務器返回的錯誤信息,可以進行統一的處理,并根據需要進行提示或記錄操作。

  6. ?使用封裝的 API 模塊:在項目中使用封裝的 API 模塊進行 API 請求。通過調用封裝模塊中的方法,傳入請求所需的參數,即可發送請求并獲取響應數據。

這種方式的好處是,在項目中可以復用封裝好的 API 請求邏輯,減少代碼的冗余,并且使得 API 調用的代碼更加清晰和易讀。

此外,對于底層的網絡請求庫,也可以根據需要進行切換和替換,而不需要修改大量的業務代碼。

uni-app 封裝api請求

在uni-app中封裝API請求可以按照以下步驟進行:

  • 創建一個utils文件夾,并在其中創建一個api.js文件,用于存放API請求相關的代碼。

  • api.js文件中,引入uni.request方法用于發送請求。示例代碼如下:

export?function?request(url,?method,?data)?{return?new?Promise((resolve,?reject)?=>?{uni.request({url:?url,method:?method,data:?data,success:?(res)?=>?{resolve(res.data);},fail:?(err)?=>?{reject(err);}});});
}

這里使用了Promise對象來處理異步請求,方便后續的使用和處理。

  • api.js文件中,定義具體的API請求函數

示例代碼如下:

import?{?request?}?from?'./utils/api';export?function?login(username,?password)?{const?url?=?'https://api.example.com/login';const?method?=?'POST';const?data?=?{username:?username,password:?password};return?request(url,?method,?data);
}export?function?getUserInfo(userId)?{const?url?=?`https://api.example.com/users/${userId}`;const?method?=?'GET';return?request(url,?method);
}

以上示例代碼中包括了登錄和獲取用戶信息兩個API請求函數。根據具體的需求,你可以進行修改或添加其他的API請求函數。

  • 在需要使用API的頁面或組件中引入并調用定義的API請求函數即可

示例代碼如下:

import?{?login,?getUserInfo?}?from?'./utils/api';login('example',?'password').then((res)?=>?{console.log('登錄成功',?res);
}).catch((err)?=>?{console.error('登錄失敗',?err);
});getUserInfo(123).then((res)?=>?{console.log('獲取用戶信息成功',?res);
}).catch((err)?=>?{console.error('獲取用戶信息失敗',?err);
});

以上示例代碼展示了如何使用封裝的API請求函數來進行登錄和獲取用戶信息的操作。根據具體需求,你可以在相應的頁面或組件中調用相關API請求函數。

通過以上步驟,你就可以在uni-app中封裝API請求,使代碼結構更加清晰和可維護。記得根據實際情況進行適當的錯誤處理和數據處理。

uni-app封裝api請求改進

//?@/utils/request.js
//?#ifdef?MP-WEIXIN
const?baseURL?=?"https://www.bradenhan.tech"
//?#endif?
//?#ifdef?H5
const?baseURL?=?""
//?#endifconst?timeout?=?5000//?封裝api請求
const?request?=?function(option){?//?獲取用戶傳入的urlvar?url?=?baseURL?+?option.url;?//?添加提請求頭var??header?=?option.header||{}if(!!option.needToken){//?添加token?header.Authorization?=??'Bearer?'?+??uni.getStorageSync('token');??}header.source=1;header.channel="h5";//?加載提示var?loading?=?option.loading;//?如果有loading就顯示loadingif(loading){uni.showLoading(loading)}//?返回一個promisereturn?new?Promise((resolve,reject)=>{??//?發起一個request請求uni.request({url,?//請求urlmethod:option.method||"GET",?//請求方法header,?//請求頭timeout,data:option.data||option.params,?//請求數據success(res){//?成功返回結果if(res.statusCode===200){resolve(res.data)//?如果是101?沒有權限if(res.data.code==101){uni.showToast({title:?res.data.msg,icon:'none'})uni.redirectTo({url:?'/pages/login/index',})}if(res.data.code!=200&&res.data.code!=0){uni.showToast({icon:'none',title:res.data.msg||'請求錯誤'})}}?},fail(err){//?失敗返回失敗結果uni.showToast({title:?'請求失敗',icon:'error'})console.error(err);reject(err)},complete(){//?完成?關閉loadingif(loading){uni.hideLoading()}}})})
}//?定義get簡潔方法
request.get=function(url,config){return??request({url,method:"GET",...config})
}//?定義post簡潔方法
request.post=function(url,data,config){return??request({url,method:"POST",??...config,data})
}
//?導出請求
export?default?request;

統一控制api.js

request.post(url,data,needToken)

參數:

  • url 請求url

  • data 請求參數data

  • needToken 是否需要參數

//?@/api/index.jsimport?request?from?'@/utils/request.js'?//?用戶注冊
export?function?customUseRegister(data){return?request.post("/xxxx1",data)
}//?微信用戶登錄
export?function?customUserLogin(data){return?request.post("/xxxx2",data)
}?//?更新用戶信息?--?需要使用Token
export?function?customUserUpdate(data){return?request.post("/xxxx3",data,{needToken:?true})
}

組件中使用

import?{?customUserLogin,?customUseRegister,customUserUpdate?}?from?'@/api/index.js'customUserUpdate(data).then((res)?=>?{console.log('成功',?res);??
}).catch((err)?=>?{?console.error('登錄失敗',?err);
});

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42673.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42673.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42673.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java數據庫連接池原理及spring boot使用數據庫連接池(HikariCP、Druid)

和線程池類似,數據庫連接池的作用是建立一些和數據庫的連接供需要連接數據庫的業務使用,避免了每次和數據庫建立、銷毀連接的性能消耗,通過設置連接池參數可以防止建立連接過多導致服務宕機等,以下介紹Java中主要使用的幾種數據庫…

【學習FreeRTOS】第11章——FreeRTOS中任務相關的其他API函數

1.函數總覽 序號函數描述1uxTaskPriorityGet()獲取任務優先級2vTaskPrioritySet()設置任務優先級3uxTaskGetNumberOfTasks()獲取系統中任務的數量4uxTaskGetSystemState()獲取所有任務的狀態信息5vTaskGetInfo()獲取單個任務的狀態信息6xTaskGetCurrentTaskHandle()獲取當前任…

Excel自動化辦公——Openpyxl的基本使用

Excel自動化辦公——Openpyxl的基本使用 個人感覺,相比Pandas,openpyxl對Excel的操作更為細致,Pandas則更適用于統計計算; 01 基本環境02 Excel數據讀取操作03 案例04 向Excel寫入數據05 表數據定向修改06 單元格樣式制定07 單元…

原型對象的簡單了解

在前面學習java有一個概念叫做繼承,方便我們對父類方法、變量等的調用。對前端的學習我們需要讓對象可以訪問和繼承其他對象的屬性和方法,就需要了解原型對象,以及原型鏈。 一、原型 構造函數通過原型分配的函數是所有對象所共享的。每一個構…

【Lua語法】算術、條件、邏輯、位、三目運算符

1.算術運算符 加減乘除取余: - * / % Lua中獨有的:冪運算 ^ 注意: 1.Lua中沒有自增自減(、–),也沒有復合運算符(、-) 2.Lua中字符串可以進行算術運算符操作,會自動轉成number 如:“10.3” 1 結果為11.3…

回歸預測 | MATLAB實現SOM-BP自組織映射結合BP神經網絡多輸入單輸出回歸預測(多指標,多圖)

回歸預測 | MATLAB實現SOM-BP自組織映射結合BP神經網絡多輸入單輸出回歸預測(多指標,多圖) 目錄 回歸預測 | MATLAB實現SOM-BP自組織映射結合BP神經網絡多輸入單輸出回歸預測(多指標,多圖)效果一覽基本介紹…

【css動畫】向下的動態箭頭

前言 使用css實現一組向下的動態箭頭效果&#xff0c;如下圖 思路 1.使用svg畫箭頭 2.設置keyframes&#xff0c;主要是每個箭頭加不同的延時。 代碼 <div class"down-arrow"><svg id"more-arrows"><polygonclass"arrow-top&quo…

Spark第三課

1.分區規則 1.分區規則 shuffle 1.打亂順序 2.重新組合 1.分區的規則 默認與MapReduce的規則一致,都是按照哈希值取余進行分配. 一個分區可以多個組,一個組的數據必須一個分區 2. 分組的分區導致數據傾斜怎么解決? 擴容 讓分區變多修改分區規則 3.HashMap擴容為什么必須…

[JavaWeb]【七】web后端開發-MYSQL

前言&#xff1a;MySQL是一種流行的關系型數據庫管理系統,它的作用是存儲和管理數據。在Web開發中,MySQL是必備的數據庫技能之一,因為它可以幫助Web開發人員處理大量的數據,并且提供了強大的數據查詢和管理功能。 一 數據庫介紹 1.1 什么是數據庫 1.2 數據庫產品 二 MySQL概述…

Servlet+JDBC實戰開發書店項目講解第六篇:訂單實現

ServletJDBC實戰開發書店項目講解第六篇&#xff1a;訂單實現 1. 數據庫設計 在訂單實現之前&#xff0c;我們需要對數據庫進行相應的設計。在這個書店項目中&#xff0c;我們可以創建以下兩個表來實現訂單功能&#xff1a; 1.1 訂單表(Order) 訂單ID(order_id)&#xff1a…

vue3 實現簡單瀑布流

一、整理思路 實際場景中&#xff0c;瀑布流一般由 父組件 提供 數據列表&#xff0c;子組件渲染每個圖片都是根據容器進行 絕對定位 &#xff0c;從而定好自己的位置取出 屏幕的寬度&#xff0c;設定 圖片的寬度 固定 為一個值&#xff0c;計算可以鋪 多少列按列數 先鋪上第一…

使用Julia進行核遞歸最小二乘算法(KRLS)的解析與實現

F 標題&#xff1a; 使用Julia進行核遞歸最小二乘算法&#xff08;KRLS&#xff09;的深度解析與實現 第一部分&#xff1a; 核遞歸最小二乘算法 (KRLS) 是一個在線核回歸算法&#xff0c;這種算法的主要特點是能夠一次處理一個樣本&#xff0c;并構建一個訓練點字典&#xf…

5G科技防汛,助力守護一方平安

“立秋雖已至&#xff0c;炎夏尚還在”&#xff0c;受臺風席卷以及季節性影響全國多地正面臨強降水的嚴峻挑戰。“落雨又順秋&#xff0c;綿綿雨不休”&#xff0c;正值“七下八上” 防汛關鍵時期&#xff0c;貴州省水文水資源局已全面進入備戰狀態。 為確保及時響應做好防汛搶…

Vue3 setup新特性簡單應用

去官網學習→組合式 API&#xff1a;setup() | Vue.js 運行示例&#xff1a; 代碼&#xff1a;App.vue <template><div class"home"><img alt"Vue logo" src"../assets/logo.png"><!-- msg 組件傳遞數據 --><Hell…

VBA_MF系列技術資料1-157

MF系列VBA技術資料 為了讓廣大學員在VBA編程中有切實可行的思路及有效的提高自己的編程技巧&#xff0c;我參考大量的資料&#xff0c;并結合自己的經驗總結了這份MF系列VBA技術綜合資料&#xff0c;而且開放源碼&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04屬于定…

MySQL 面試題

一、數據庫基礎 1、MySQL 有哪些數據庫類型? (1) 整數類型&#xff1a; TINYINT 1 字節 SMALLINT 2 字節 MEDIUMINT 3 字節 INT 4 字節 BIGINT 8 字節 ① 任何整數類型都可以加上 UNSIGNED …

【學會動態規劃】最長湍流子數組(23)

目錄 動態規劃怎么學&#xff1f; 1. 題目解析 2. 算法原理 1. 狀態表示 2. 狀態轉移方程 3. 初始化 4. 填表順序 5. 返回值 3. 代碼編寫 寫在最后&#xff1a; 動態規劃怎么學&#xff1f; 學習一個算法沒有捷徑&#xff0c;更何況是學習動態規劃&#xff0c; 跟我…

vue+elementui 實現文本超出長度顯示省略號,鼠標移上懸浮展示全部內容

一、場景 表單內的輸入框一般為固定寬度&#xff0c;當輸入框內容長度超出輸入框寬度時&#xff0c;需要顯示省略號&#xff0c;并設置鼠標移到輸入框上時懸浮展示全部內容。 <el-tooltipplacement"top-start"effect"light":content"basicData[Or…

在 IDEA 中使用 Git開發 圖文教程

在 IDEA 中使用 Git開發 圖文教程 一、連接遠程倉庫二、IDEA利用Git進行開發操作三、分支操作3.1 新建分支3.2 切換分支3.3 刪除分支3.4 比較分支3.5 合并分支 四、常用快捷鍵 一、連接遠程倉庫 一、打開IDEA&#xff0c;進入目錄&#xff1a;File ->New ->Project from…

Skywalking全鏈路追蹤【學習筆記】

Skywalking全鏈路追蹤的服務搭建&#xff0c;使用docker進行安裝。 搭建服務 搭建【ES】 # 拉取 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.10 # 啟動 docker run -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.typesingle-nod…