uni小程序接口request接口封装

*创建utils/request.js 文件

// @/utils/request.js

// import store from '@/store/index.js'//vuex环境

const base_url = {
	PROD: '', // 生产环境地址
	DEV: 'https://m.douban.com/rexxar/api'   // 开发环境地址
}
// 请求拦截器
uni.addInterceptor('request', {
	invoke(args) {
		console.log('发送请求前拦截==》》',args)
		// 发送请求前
	},
	success(args) {
		// 请求成功响应后
	}, 
	fail(err) {
		// 请求失败
		console.log('interceptor-fail',err)
	}, 
	complete(res) {
		// 完成请求后
	}
})
const showToast = (title) => {
    uni.showToast({
        title: title,
        icon: 'none'
    })
}
const request = (obj) => {
	obj.url = obj.url || '';
	obj.method = obj.method || 'GET';
	obj.data = obj.data || {};
	obj.header = obj.header || 'application/json; charset=utf-8';
	obj.loading = obj.loading === false ? false : true;
	// let token = token || ''; // 登录获得的 token
    let loadingStatus = true;
	setTimeout(()=>{
            if (loadingStatus && obj.loading) {
                uni.showLoading({
                        title:'加载中',
                        mask: true
                })
            }
	}, 800) // 800毫秒后如果loadingStatus === false 则表示请求返回了,不显示loading
	return new Promise((resolve, reject) => {
		uni.request({
			url: (process.env.NODE_ENV === 'development' ? base_url.DEV : base_url.PROD) + obj.url,
			method: obj.method,
			data: obj.data,
			header: {
				// 'TOKEN': token,
				'Content-Type': obj.header
			},
			success: res => { // 服务器成功返回的回调函数
				console.log('res=>>>',res)
                if (res.statusCode === 200) {
				let result = res.data;
				reject(result);
					} else { // 返回值非 200,强制显示提示信息
						loadingStatus = false
						showToast('[' + res.statusCode + '] 系统处理失败');
						reject('[' + res.statusCode + '] 系统处理失败');
					}
			},
			fail: (err) => { // 接口调用失败的回调函数
				if (err.errMsg != 'request:fail abort') {
					loadingStatus = false
					showToast('连接超时,请检查您的网络。');
					reject('连接超时,请检查您的网络。');
				}
			},
			complete: () => {
				if (loadingStatus && obj.loading) {
				  uni.hideLoading()
				  loadingStatus = false
				}
			}
		})
	})
}

export default request

*创建api/user.js文件

import http from '@/utils/request.js'

// 登录
export function login(data) {
	return http({url: '/v2/tv/recommend', method:'GET', data});
}

*页面使用

在这里插入代码片
import { login } from '@/api/user.js'

async onLoad(){
			        try {
			            const { data: res } = await login({
			                refresh: 0,
			                start: 0,
			                count: 20,
			                selected_categories: {},
			                uncollect: false,
			                tags: '',
			            });
			            console.log("login=>",res);
			        } catch (err) {
			            console.log("loginErr=>",err);
			        }
					
			        // or login().then(()=>{}).catch(()=>{})
			    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值