溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

uni-app調(diào)取接口的方式及封裝uni.request()的方法

發(fā)布時間:2022-08-08 15:14:01 來源:億速云 閱讀:409 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“uni-app調(diào)取接口的方式及封裝uni.request()的方法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

    一、uni-app中調(diào)取接口的三種方式

    1、uni.request({})

    uni.request({
    	url:'/api/getIndexCarousel.jsp',
    	method:'get',
    	success:res=>{
    		console.log(res.data);
    		this.carouselData = res.data
    	}
    })

    2、uni.request({}).then()

    uni.request({
    	url:'/api/getIndexCarousel.jsp',
    	method:'get',
    }).then((result)=>{
    	let [error,res] = result;
    	//result將返回一個數(shù)組[error,{NativeData}]
    	//NativeData:調(diào)取接口后返回的原生數(shù)據(jù)
    	if(res.statusCode === 200){
    		this.carouselData = res.data
    	}
    	if(res.statusCode === 404){
    		console.log('請求的接口沒有找到');
    	}
    })

    3、async/await

    async:用在函數(shù)定義的前面
    async request(){    //函數(shù)體;}
    await:用在標(biāo)明了async關(guān)鍵字的函數(shù)內(nèi)部,異步操作的前面。

    onLoad() {
    	this.request();
    },
    methods: {
    	async request(){
    		let result = await uni.request({
    			url:'/api/getIndexCarousel.jsp'
    		})
    		console.log(result)
    		let [err,res] = result;
    		if(res.statusCode === 200){
    			this.carouselData = res.data;
    		}
    	}
    }

    二、封裝uni.request();

    1、創(chuàng)建一個對象,將該對象掛在Vue的原型下

    新建@/common/request.js文件

    初步寫法(僅供參考):

    export default {
    	request(options){
    		uni.request({
    			...options,
    			success:res=>{
    				console.log(res)
    			}
    		})
    	},
    	get(url,data={},options={}){
    		options.url=url,
    		options.data=data,
    		options.method='get',
    		this.request(options)
    	},
    	post(url,data={},options={}){
    		options.url=url,
    		options.data=data,
    		options.method='post',
    		this.request(options)
    	}
    }

    二次更改:

    export default{
    	//封裝uni.request():
    	request(options){
    		return new Promise((resolve,reject)=>{
    			//書寫異步操作的代碼
    			uni.request({
    				...options,
    				success:res=>{
    					if(options.native){
    						resolve(res)	//調(diào)取接口后返回的原生數(shù)據(jù)	
    					}
    					if(res.statusCode === 200){
    						resolve(res.data)	//異步操作執(zhí)行成功
    					}else{
    						console.log('請求的接口沒有找到');
    						reject(res) 	//異步操作執(zhí)行失敗
    					}
    				}
    			})
    		})
    	},
    	get(url,data={},options={}){
    		options.url=url;
    		options.data=data;
    		options.method='get';
    		return this.request(options)
    	},
    	post(url,data={},options={}){
    		options.url=url;
    		options.data=data;
    		options.method='post';
    		return this.request(options)
    	}
     
    }

    2、進(jìn)入main.js文件

    import request from '@/common/request.js';
    Vue.prototype.$Z = request;

    例:在任意文件中書寫下列代碼可以調(diào)用。this.$Z.get();

    3、在頁面中調(diào)用

    //封裝uni.request():
    this.$Z.get('/api/getIndexCarousel.jsp',{},{
    	native:false
    }).then(res=>{
    	//異步操作成功
    	console.log(res)
    }).catch(res=>{
    	//異步操作失敗
    	console.log(res)
    }).finally(res=>{
    	//異步操作完成
    });

    uniapp的網(wǎng)絡(luò)請求方法

    uni.request({
        url: 'https://www.example.com/request', //僅為示例,并非真實接口地址。
        data: {
            name: 'name',
            age: 18
        },
        header: {
            'custom-header': 'hello' //自定義請求頭信息
        },
        success: function (res) {
            console.log(res.data);
        }
    });

    uniapp網(wǎng)絡(luò)請求的get和post

    • 對于 GET 方法,會將數(shù)據(jù)轉(zhuǎn)換為 query string。例如 { name: ‘name’, age: 18 } 轉(zhuǎn)換后的結(jié)果是 name=name&age=18。

    • 對于 POST 方法且 header[‘content-type’] 為 application/json 的數(shù)據(jù),會進(jìn)行 JSON 序列化。

    • 對于 POST 方法且 header[‘content-type’] 為 application/x-www-form-urlencoded 的數(shù)據(jù),會將數(shù)據(jù)轉(zhuǎn)換為 query string。

    請求的 header 中 content-type 默認(rèn)為 application/json

    注意 post請求必須加header[‘content-type’]

    uni-app 封裝接口request請求

    我們知道一個項目中對于前期架構(gòu)的搭建工作對于后期的制作有多么重要,所以不管做什么項目我們拿到需求后一定要認(rèn)真的分析一下,要和產(chǎn)品以及后臺溝通好,其中尤為重要的一個環(huán)節(jié)莫過于封裝接口請求了。因為前期封裝好了,后面我們真的可以實現(xiàn)粘貼復(fù)制了。所以今天給大家分享一個在uni-app中如何封裝一個request請求。

    第一步、根目錄下新建 config.js 文件

    const config = {
    base_url: '這里可以是生產(chǎn)環(huán)境或者測試環(huán)境'
    }
    export { config }

    這里主要配置接口的基本路徑

    第二步、根目錄下新建 utils/http.js 文件

    import {
    	config
    } from '../config.js'
     
    export const apiResquest = (prams) => { //prams 為我們需要調(diào)用的接口API的參數(shù) 下面會貼具體代碼
     
    	// 判斷請求類型
    	let headerData = {
    		'content-type': 'application/json'
    	}
     
    	let dataObj = null
            //因為我們的GET和POST請求結(jié)構(gòu)不同這里我們做處理,大家根據(jù)自己后臺接口所需結(jié)構(gòu)靈活做調(diào)整吧
    	if (prams.method === "GET") {
    		headerData = {
    			'content-type': 'application/json',
    			'token': uni.getStorageSync('token')
    		}
    	} else {
    		dataObj = {
    			'data': prams.query,
    			'token': uni.getStorageSync('token')
    		}
    	}
    	return new Promise((resolve, reject) => {
    		let url = config.base_url + prams.url; //請求的網(wǎng)絡(luò)地址和局地的api地址組合
    		uni.showLoading({
    			title: '加載中',
    			mask: true
    		})
    		return uni.request({
    			url: url,
    			data: dataObj,
    			method: prams.method,
    			header: headerData,
    			success: (res) => {
    				uni.hideLoading()
                                    //這里是成功的返回碼,大家根據(jù)自己的實際情況調(diào)整
    				if (res.data.code !== '00000') {
    					uni.showToast({
    						title: '獲取數(shù)據(jù)失敗:' + res.data.msg,
    						duration: 1000,
    						icon: "none"
    					})
    					return;
    				}
    				resolve(res.data);
    				console.log(res.data)
    			},
    			fail: (err) => {
    				reject(err);
    				console.log(err)
    				uni.hideLoading()
    			},
    			complete: () => {
    				console.log('請求完成')
    				uni.hideLoading()
    			}
    		});
    	})
    }

    第三步、 創(chuàng)建model 層 根目錄下新建 models/index.js 文件

    ——-??注意: 這里可以根據(jù)自己的項目功能需求分解models 層——-

    import { apiResquest } from '../utils/http.js'
     
    //POST 請求案例
     
    export const login = (query) => {
    	return apiResquest({
    		url: '這里是API的地址',
    		method: 'POST',
    		query: {...query}
    	})
    }
     
    //GET 請求案例可以傳遞參數(shù)也可以不傳遞
    export const validateCode  = (query) => {
    	let str = query
    	return apiResquest({
    		url: `您的API地址 ?${str}`,
    		method: 'GET'
    	})
    }

    第四步、頁面中調(diào)用

    import { login } from '../../models/index.js'
    //頁面中的 methods 里面就可以直接調(diào)用了
    Login(){
            //這里可以設(shè)置需要傳遞的參數(shù)
    	let uid = uni.getStorageSync('userId')
    	login(uid).then((res) => {
    		console.log(res)
    	}).catch(err => {
    		console.log(err)
    	})
    }

    “uni-app調(diào)取接口的方式及封裝uni.request()的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI