uni-app封裝請求方法
阿新 • • 發佈:2022-04-08
uni.request本身已經是基於promise了,也可以用async/await,為啥還要進行封裝呢?
1、封裝成一個方法後,以後想要傳送請求就直接呼叫這個方法,這樣所有的請求都走這個方法,就可以對所有的請求做一個攔截,
2、另外,介面的域名不管要使用多少次都是一樣的,難以維護,
非同步處理的封裝通過promise比較好。
const BASE_URL = 'http://localhost:8082' // 通過export向外暴露一個方法,方法名叫myRequest,呼叫myRequest方法時會向方法中傳遞一個物件options export const myRequest = (options)=>{ return new Promise((resolve,reject)=>{ // 非同步處理的封裝通過promise比較好,並且要return出去, uni.request({ // 在回撥函式中處理非同步請求 url: BASE_URL + options.url, // 將介面地址分為兩部分,這樣如果域名改變了好維護,介面地址從options中獲取 method: options.method || 'GET', // 方法從options中獲取,如果沒有傳入method,則預設為GET, data: options.data || {}, // data從options中獲取,如果沒有傳入data, 則預設一個空物件 success: (res) => { // 用箭頭函式,res是返回來的資料 if(res.data.status !== 0){ // 如果請求失敗,則給一個提示 return uni.showToast({ title: '獲取資料失敗!' }) } resolve(res) //如果請求成功,呼叫resolve返回資料 }, fail: (err)=>{ // err 是返回來的錯誤資訊 uni.showToast({ // 給一個訊息提示 title: '請求介面失敗!' }) reject(err) // 呼叫reject方法把錯誤訊息返回出去 } }) }) }
這個方法可能每個頁面都會用到,我們可以在main.js中引入,
import { myRequest } from './util/api.js'
接收之後,掛載到全域性,這樣所有的頁面都可以呼叫這個方法
Vue.prototype.$myRequest = myRequest
使用方法:使用this.$myRequest進行呼叫
onLoad() { this.getSwipers() }, methods: { // 獲取輪播圖資料 async getSwipers(){ // uni.request({ // url: 'http://localhost:8082/api/getlunbo', // method: 'get', // success:(res)=>{ // console.log(res) // if(res.data.status !== 0){ // return uni.showToast({ // title: '獲取資料失敗!' // }) // } // this.swipers = res.data.message // // } // }) const res = await this.$myRequest({url: '/api/getlunbo'}) console.log(res) this.swipers = res.data.message } }