uni-app网络请求封装(完整版)

2023-05-16

目录结构(根目录开始)

├── api                        # 所有请求
│   └── user.js          	   # 用户请求api
├── store                      # 全局store管理
│   └── modules          	   # api模块
│   │   └── user.js            # 用户请求模块
│   └── index.js          	   # 状态管理初始化
├── utils                      # 全局公用方法
│   ├── auth.js                # 本地缓存
│   ├── env.js                 # 公共参数
│   └── request.js             # 网络请求中间件
└── main.js                    # 入口文件 加载组件 初始化等

下面是文档内容

api/user.js(用户请求api)

// 引用网络请求中间件
import request from './../utils/request';
/**
 *    登陆请求
 */
export function login(data) {
	return request({
		url: '/user/login',
		method: 'POST',
		data
	})
}

store/modules/user.js(用户请求模块)

// 引用用户请求api
import {login} from '../../api/user';
import {setToken} from '../../utils/auth';

//下面我是示例的微信小程序的参数,可自行修改请求参数
const actions = {
	login({commit}, param) {
	    return new Promise((resolve, reject) => {
	        login({
				iv: param.iv,		// 请求参数(可自行修改)
				code: param.code	// 请求参数(可自行修改)
			}).then(response => {
				// 这里可以自己添加方法
				// 保存获取到的token到本地之类的
				// 必须在resolve之前执行
				setToken(response.token)	//将获取到的token保存到本地
	            resolve(response)
	        }).catch(error => {
	            console.log(error)
	        })
	    })
	}
};

export default {
    namespaced: true,
    actions
}

store/index.js(状态管理初始化配置)

import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'

Vue.use(Vuex)
const store = new Vuex.Store({
	modules: {
		user
	}
});

export default store

utils/auth.js(本地缓存配置)

const TokenKey = 'token';

// 认证令牌
export function getToken() {
	return uni.getStorageSync(TokenKey)
}

export function setToken(token) {
	return uni.setStorageSync(TokenKey, token)
}

export function removeToken() {
	return uni.removeStorageSync(TokenKey)
}

utils/env.js(公共参数)

"use strict";
// 变量可自行添加修改
export default { //存放变量的容器
	appid: '****',
	baseUrl: 'http://**.***.***.***'
}
/**
 * 	appid : 		小程序appid
 *  baseUrl : 		服务端域名
 */

utils/request.js(网络请求中间件)

import {getToken,removeToken} from '../utils/auth';
import env from '../utils/env';

function service(options = {}) {
	options.url = `${env.baseUrl}${options.url}`;
	// 判断本地是否存在token,如果存在则带上请求头
	if (getToken()) {
		options.header = {
			'content-type': 'application/json',
			'Authorization': `${getToken()}`	// 这里是token(可自行修改)
		};
	}

	return new Promise((resolved, rejected) => {
		options.success = (res) => {
			// 如果请求回来的状态码不是200则执行以下操作
			if (res.data.code !== 200) {
				// 非成功状态码弹窗
				uni.showToast({
					icon: 'none',
					duration: 3000,
					title: `${res.data.msg}`
				});
				// 登陆失效
				if (res.data.code === 403) {
					// 清除本地token
					removeToken()
					// 关闭所有页面返回到登录页
					uni.reLaunch({
						url: '/pages/login/login'
					})
				}
				// 返回错误信息
				rejected(res)
			} else {
				// 请求回来的状态码为200则返回内容
				resolved(res.data.data)
			}
		};
		options.fail = (err) => {
			// 请求失败弹窗
			uni.showToast({
				icon: 'none',
				duration: 3000,
				title: '服务器错误,请稍后再试'
			});
			rejected(err);
		};
		uni.request(options);
	});
}

export default service;

页面上使用demo(login.vue)

******
<script>
	export default {
		data() {
			return {

			}
		},
		onLoad() {

		},
		methods: {
			loginBut: function() {
				// 调用状态管理内的函数请求
				// user是store/index.js下定义的user名称,login是user这个文件内的请求函数
				// code跟iv是传送到store/modules/user.js下login函数内的参数
				this.$store.dispatch('user/login', {
					iv: value[0][1].iv,
					code: value[1].code
				}).then(result => {
					// 登陆成功的结果
					console.log(result)
				})
			},
		}
	}
</script>
******

完结~
不懂的可留言~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uni-app网络请求封装(完整版) 的相关文章

  • GoPro实时图片传输

    基于Open GoPro库与相机连接进行传输 Open GoPro Open GoPro 基于HTTP方式传输 基于HTTP方式传输分为preview stream webcam两种方法 其中preview为无线传输 preview str
  • 【博学谷学习记录】超强总结,用心分享 |switch-case

    1 switch case基础用法 xff1a switch 转换 开关 case 小例子或者选项 switch 语句是多分支语句 也可以实现多选1 switch 表达式 case value1 执行语句1 break case value
  • Mavros读取PixHawk硬件的IMU数据

    Ubuntu18 04 读取PixHawk硬件的IMU数据 实现方式 使用mavros话题读取到Pixhawk飞控的IMU数据 实现步骤 安装ros 检查是否安装cmake xff08 未安装根据提示安装 xff09 cmake span
  • Eclipse 的快捷键以及文档注释、多行注释的快捷键

    原文地址 xff1a http my oschina net u 590763 blog 70166 其实快捷键可以自己设定 xff1a eclipse gt gt gt window gt gt gt preferences gt gt
  • INS/GNSS组合导航(四)卡尔曼滤波比较之KF/EKF/UKF/PF

    1 摘要 卡尔曼滤波自1960年代发表至今 xff0c 在各个时间序列估计领域尤其是位置估计 惯性导航等得到了广泛的应用 xff0c 后续逐渐演化出EKF UKF以及PF xff0c 本文重点对比KF EKF与UKF及PF的差异及演化来历
  • INS/GNSS组合导航(三)松耦合、紧耦合、深度耦合

    0 INS GNSS组合导航概述 所谓INS GNSS组合导航 xff0c 就是利用INS和GNSS两者信息进行融合 xff0c 从而综合利用两者的优点 xff0c 实现优势互补 xff0c 求解实现pose的解算 xff0c 得到PVA
  • CDN详解

    1 什么是CDN xff1f CDN是一个空间换时间的策略 CDN的全称是Content Delivery Network xff0c 即内容分发网络 CDN是构建在网络之上的内容分发网络 CDN使用户就近获取所需内容 xff0c 降低网络
  • Spring boot 引入Spring Security后iframe或者frame所引用的页无法显示的问题

    最近在调整框架 xff0c 决定使用Spring Boot来简化框架 xff0c 引入Spring Security主要目的是做用户登录认证 xff0c 附带得到Spring Security各种特性 xff0c 包括主题中的问题 由于原项
  • 机器人操作命令记录

    1 键盘移动turtlebot2 启动底盘 xff0c 在终端输入 roslaunch turbot bringup minimal span class token punctuation span launch 开启新终端 xff0c
  • Python self参数 &amp; 函数详解

    在介绍Python的self用法之前 xff0c 先来介绍下Python中的类和实例 我们知道 xff0c 面向对象最重要的概念就是类 xff08 class xff09 和实例 xff08 instance xff09 xff0c 类是抽
  • PuTTY报错:Network error:Connection timed out

    PuTTY报错 xff1a Network error xff1a Connection timed out 为什么会出现 连接超时 错误 xff1f 当 SSH 协议在 2 台设备之间建立连接时 xff0c 客户端向服务器发送一条消息 x
  • rosserial简介

    rosserial是用于非ROS设备与ROS设备进行通信的一种协议 它为非ROS设备的应用程序提供了ROS节点和服务的发布 订阅功能 xff0c 使在非ROS环境中运行的应用能够通过串口或网络能够轻松地与ROS应用进行数据交互 rosser
  • ARM汇编编程基础(五) -- 其它常见寻址模式与常见指令

    本系列文章节选自本人所著 深入浅出嵌入式底层软件开发 现在我们已经掌握了所有知识 xff0c 可以编写简单的ARM汇编程序 xff0c 但如果要编写较为复杂的ARM程序 xff0c 就必须掌握更多的寻址模式和指令 xff0c 这就是本节的重
  • 为什么 Docker 和 Kubernetes 是用 Go 写的而不是 C# ?

    这是 Reddit 平台上面这几天一篇比较热门的帖子 非常有意思 xff0c 本文我列出了几个高赞的回答 x1f466 HahahahahaSoFunny 为什么 Docker 和 Kubernetes 工具是用 Go 写的而不是 C xf
  • BeanPropertyRowMapper使用注意事项

    query过程都可以进行数据类型自动转换 xff0c 而且不仅仅按标准命名 xff0c 还可以支持下划线分隔后拼接成驼峰式字符 完全轻量级 BeanPropertyRowMapper ParameterizedBeanPropertyRow
  • Hello Kubernetes快速交互实验手册

    K8S在线实验室提供了一个交互实验环境 xff0c 现将这部分文章精简并翻译为中文 xff0c 希望对那些不了解K8S的童鞋有帮助 xff0c 能够快速玩起来有个感性认识 原文 xff1a https kubernetes io docs
  • 嵌入式程序员的几年的小心得

    作为嵌入式研发工程师工作也几年了 xff0c 其实在大学时期11年那会儿在做的 xff0c 现在依然在是做 xff0c 现在接触的单片机 Arm Linux 安卓程序这三类 xff0c 其实和大学时候的时期做的东西并无区别 只不过当时除了学
  • 2.17.3-Python爬虫(requests登录)

    文章目录 1 环境与配置1 1 创建一个pure python项目1 2 集成configparser1 3 集成selenium1 3 1 pycharm安装selenium包1 3 2 下载自己chrome浏览器版本对应的驱动1 3 3
  • C++实现麻将基本听牌胡牌的算法

    include lt iostream gt include lt vector gt include lt algorithm gt include lt chrono gt enum MajiangType emMJType Wan 6
  • H3C交换机查看相关的命令

    1 dis cpu 查看CPU 2 dis memory 查看内存 3 dis device 查看硬件 4 dis power 查看电源 5 dis fan 查看风扇 6 dis env 查看温度 7 dis version 查看版本 8

随机推荐

  • 我的学习之路—5月1号开始,每周至少写5篇文章

    xfeff xfeff 爱拼才会赢 xff0c 这不仅仅是一句宣言 xff0c 而是一种态度 一种乐观向上的态度 一种端正的态度 请相信 xff0c 有什么样的态度 xff0c 就有什么样的结果 有什么样的态度 xff0c 就有什么样的人生
  • Serverlet生命周期

    xfeff xfeff Serverlet简介 xff1a Servlet Server Applet xff0c 全称Java Servlet xff0c 未有中文译文 是用Java编写的服务器端程序 其主要功能在于交互式地浏览和修改数据
  • CentOS下yum安装wine

    Linux下安装wine可以从源码编译安装 xff0c 但一般都觉得麻烦 xff0c 所以尽量利用yum进行安装 xff0c 解决很多包的依赖关系 首先安装一个epel rpm ivh http dl Fedoraproject org p
  • Maven使用教程

    一 Maven介绍 我们在开发项目的过程中 xff0c 会使用一些开源框架 第三方的工具等等 xff0c 这些都是以jar包的方式被项目所引用 xff0c 并且有些jar包还会依赖其他的jar包 xff0c 我们同样需要添加到项目中 xff
  • Linux下 文件类型不同颜色的含义

    linux 文件颜色的含义 蓝色 代表目录 绿色 代表可执行文件 红色 表示压缩文件 浅蓝色 表示链接文件 灰色 表示其他文件 红色闪烁 表示链接的文件有问题了 黄色 表示设备文件 蓝色文件 目录 白色文件 一般性文件 xff0c 如文本文
  • Jenkins在windows上详细安装(service的msi包安装)与构建部署使用教程

    注意 xff1a 这种安装方式 xff0c Jenkins将做为service在windows上安装 xff0c GUI测试build时将看不到浏览器 如需要GUI测试build 可新建一个windows slave来build Jenki
  • vim常用命令总结

    vim 选择文本 xff0c 删除 xff0c 复制 xff0c 粘贴 文本的选择 xff0c 对于编辑器来说 xff0c 是很基本的东西 xff0c 也经常被用到 xff0c 总结如下 xff1a v 从光标当前位置开始 xff0c 光标
  • Spring boot WebMvcConfigurerAdapte方法已经过时解决方法

    在spring boot 2 0以后 WebMvcConfigurerAdapter 这个方法已经过时 xff0c 通过百度网上的资料之后发现很多人说是改成继承WebMvcConfigurationSupport这个类 xff0c 这种方式
  • RTOS流和消息缓冲器

    RTOS流和消息缓冲器 任务间通信和同步 可从FreeRTOS V10 0 0获得 介绍 流缓冲区是 RTOS任务 的RTOS任务 xff0c 并且是任务通信原语的中断 与大多数其他FreeRTOS通信原语不同的是 xff0c 它们针对单读
  • 使用 Docker/LXC 迅速启动一个桌面系统

    原文出处 xff1a vpsee Docker是 dotCloud 的一个开源引擎 xff0c 旨在提供一种应用程序的自动化部署解决方案 xff0c 简单的说就是 xff0c 在 Linux 系统上迅速创建一个容器 xff08 类似虚拟机
  • [统计学笔记] 统计学计算题选讲(精华)

    统计学计算题选讲 第 1 题 某班级学生物理课程考试成绩分别为 68 89 88 84 86 87 75 73 72 68 75 82 97 58 81 54 79 76 95 76 71 60 90 65 76 72 76 85 89 9
  • Python爬取CSDN博客所有文章

    需求 Python爬取某个账号CSDN博客所有文章的标题 xff0c 类型 xff0c 创建时间 xff0c 阅读数量 xff0c 并将结果保存至Excel 分析 CSDN主页URL为 xff1a https blog csdn net s
  • 乐鑫ESP32-C3项目(8)- USB串口和JTAG控制器

    摘录自参考手册之 23 USB串口 JTAG控制器 可用于烧录芯片外部flash 读取程序输出的数据 JTAG调试 仅占用2个管脚接电脑USB即可 xff0c 无需其他转换器 包含CDC ACM xff08 通信设备类抽象控制模型 xff0
  • launch 文件解析

    roslaunch工具是ros中python实现的程序启动工具 xff0c 通过读取launch文件中的参数配置 属性配置等来启动一系列节点 xff1b 很多ROS包或源码包中都有launch文件 xff0c 一般为该程序包能够运行起来的基
  • git 下载特定分支

    1 esp32上有2个分支 现在要下载特定的分支 git clone b esp32 homekit ble ssh liuyuhai 64 gerrit yeedev com 29418 yeelink firmware esp32 2
  • Docker: Ubuntu使用VNC运行基于Docker容器里的桌面系统

    https hub docker com r dorowu ubuntu desktop lxde vnc https github com fcwu docker ubuntu vnc desktop docker ubuntu vnc
  • JavaScript学习--splice()函数详解

    splice 函数详解 splice 方法向 从数组中添加 删除项目 xff0c 然后返回被删除的项目 注释 xff1a 该方法会改变原始数组 参数 xff1a index 必需 整数 xff0c 规定添加 删除项目的位置 xff0c 使用
  • docker查看容器IP的方法

    1 进入容器内部后 cat etc hosts 会显示自己以及 link 软连接的容器IP 2 使用命令 docker inspect docker inspect f 39 range NetworkSettings Networks I
  • java下载需要oracle账户

    https www oracle com java technologies javase downloads html 目前在官网下载低于jdk1 8的java jdk的时候需要登陆 xff0c 这边分享一个账号 xff0c 方便下载 账
  • uni-app网络请求封装(完整版)

    目录结构 根目录开始 api 所有请求 user js 用户请求api store 全局store管理 modules api模块 user js 用户请求模块 index js 状态管理初始化 utils 全局公用方法