uniapp+uview封装小程序请求

提要:

uniapp项目引入uview库 此步骤不再阐述

1.创建环境文件

env.js:

复制代码
let BASE_URL;

if (process.env.NODE_ENV === 'development') {
	// 开发环境
	BASE_URL = '请求地址';
} else {
	// 生产环境
	BASE_URL = '请求地址';
}

export default BASE_URL;

2.创建请求文件

该封装文件对后端接口返回格式有规范要求

如接口格式跟封装文件不匹配 可通过 request.js 中响应拦截进行修改

接口返回格式示例:

复制代码
{
    code: 200, // 根据code值判断接口状态
    data: {}  // 接口内容
    msg: "success"  // 接口备注
}

request.js:

复制代码
// 接口共用地址
import BASE_URL from '@/env.js'
var request = function(app) {
	// 初始化请求配置
	uni.$u.http.setConfig((config) => {
		config.baseURL = BASE_URL;
		return config
	})

	// 请求拦截
	uni.$u.http.interceptors.request.use(config => {
		config.data = config.data || {}
		// 接口名为login则不携带token
		if(config.url != 'login'){
			config.header['Authorization'] = uni.getStorageSync('token') || ''
		}
		return config

	}, config => {
		// 返回异常承诺对象
		return Promise.reject(config)
	})

	// 响应拦截
	uni.$u.http.interceptors.response.use(response => {
		// uni.hideLoading();
		let data
		switch (response.data.code) {
			case 401 || 402 || 403:
				uni.showModal({
					title: '提示',
					content: response.data.msg,
					showCancel: false, // 隐藏取消按钮
					success: (res) => {
						if (res.confirm) {
							uni.redirectTo({
								url: '/pages/login'
							})
						}
					}
				})
				break;
			default:
				data = response.data.data;
				break;
		}
		return data;
	}, responseError => {
		// 返回异常承诺对象
		return Promise.reject(responseError)
	})

}

// 导出
module.exports = request;

3.引入请求文件

在根目录main文件内引入

复制代码
// 引入请求封装
require('@/request/request.js')(app)

4.封装请求文件

以为 login.js 为例

该POST登录请求的 login函数名 需对应第二步封装文件中的请求不携带token的判断条件

复制代码
// POST
export const login = (data) => {
	return uni.$u.http.post("login", data);
}
// GET
export const userInfo = (data) => {
	return uni.$u.http.get("userInfo", {
		data
	});
}

5.请求示例

复制代码
import { login, userInfo } from "@/api/login.js"


data(){
    return{
        id:"",
        form: {
			username: '123456',
			password: '123456',
		},
    }
}



methods:{
    // 登录 POST请求
    login(){
        const data = await login(this.form)
        console.log(data)
		if (data.token) {
            // 如果存在Token 则储存到本地
		    uni.setStorageSync('token', data.token);
		}
    }
    // GET请求
    getUserInfo(){
        const data = await login({id: this.id})
        console.log(data)
    }
}
相关推荐
CrissChan1 小时前
Pycharm 函数注释
java·前端·pycharm
moxiaoran57531 小时前
uni-app学习笔记二十九--数据缓存
笔记·学习·uni-app
小小小小宇1 小时前
Vue.nextTick()笔记
前端
小约翰仓鼠3 小时前
vue3子组件获取并修改父组件的值
前端·javascript·vue.js
Lin Hsüeh-ch'in3 小时前
Vue 学习路线图(从零到实战)
前端·vue.js·学习
烛阴3 小时前
bignumber.js深度解析:驾驭任意精度计算的终极武器
前端·javascript·后端
计蒙不吃鱼3 小时前
一篇文章实现Android图片拼接并保存至相册
android·java·前端
全职计算机毕业设计4 小时前
基于Java Web的校园失物招领平台设计与实现
java·开发语言·前端
啊~哈4 小时前
vue3+elementplus表格表头加图标及文字提示
前端·javascript·vue.js