GraceRequest 意在为大家提供一个更简洁的、更安全的请求工具,提供了全局 token 验证机制、签名校验机制以及会员校验机制,可以大幅度增加接口交互过程的安全;
我们为您提供了此工具的视频教程,包含后端原理,建议您在 GraceUI 已付费用户群 内下载观看 ( 视频为 5.0 版本, 6.0 与其原理一样,区别是 6.0 只提供 await 形式的接口  );
1 完全基于 promise 方式 ( promise 教程 : https://www.lesscode.work/sections/6273465961989.html ); 2 使用便捷、交互安全性高。
GraceRequest 对每一次交互都需进行基础 token 验证,并需要后端配和,如果您并不能适应此种方式您可以使用 uni.request() 来实现自己项目的接口交互工作;
| H5 | APP | 小程序 | NVUE | 
| ✔ | ✔ | ✔ | ✔ | 
1. token 获取 [ 注意此 token 为基础请求 token,每一个请求都要求携带 ] 1.1 首先检查本地是否已经保存 token 数据; 1.1.1 存在并在有效期内 -> 参与提交; 1.1.2 存在并已经过期 -> 连接 api 获取 token -> 本地保存 -> 参与提交; 1.1.3 不存本地 token -> 连接 api 获取 token -> 本地保存 -> 参与提交; 2. 提交数据是利用 header 携带 token 数据, 后端接收并校验; 3. 后端校验成功 -> 执行逻辑 -> 返回结果 | 校验失败 -> 终止执行 -> 返回错误信息
请打开 /custom/graceRequestConfig.js 对接口基础地址、基础令牌函数等进行修改;
// grace reuqest 请求库相关配置
export default{
	// api 基础 url
	apiBaseUrl        : 'https://www.******.com/api/',
	// 调试模式 [ false 关闭调试输出,项目发包时请设置此项为 false ]
	debug             : true,
	// 本地 Token 数据键名称
	localTokenKeyName : 'reqToken',
	// 用户登录 Token 数据键名称
	userTokenKeyName  : 'uToken',
	// token 有效期, 单位 秒 ,要与后端保持一致
	expiredTime       : 3600,
	// post 方式 header[content-type] 默认值
	postHeaderDefault : 'application/x-www-form-urlencoded',
	// 接口请求秘钥 与后端开发人员协商格式及获取
	apiKey            : 'AppKey******',
	// 基础 token 获取 api 接口地址
	baseTokenUrl      : 'https://www.******.com/api/srequest/makeToken',
	// 从服务器获取 token 函数
	// 因后端语言不同、思路不同,请跟据自己的 api 情况完成 token 获取函数
	// 一个示例,实际开发请跟据自己情况复写此函数	
	getToken          : function(){
		var apiKey       = this.apiKey;
		var baseTokenUrl = this.baseTokenUrl;
		return new Promise((resolve, reject) => {
			// 发起请求
			uni.request({
				// token 授权 api 服务器地址
				url      : baseTokenUrl,
				// 请求秘钥
				data     : { 'appKey' : apiKey},
				// 请求方式 POST
				method   : "POST",
				// headers
				header   : {'content-type' : 'application/x-www-form-urlencoded'},
				// 返回值类型
				dataType : "json"
			}).then((res)=>{
				var data = res.data;
				if(data.status == 'ok'){
					// 将 token 保存在本地并记录获取时间
					uni.setStorageSync(this.localTokenKeyName, data.data);
					// 记录时间
					var dateObj = new Date();
					var cTime   = dateObj.getTime();
					cTime      += '';
					uni.setStorageSync('GraceRequestTokenTime', cTime);
					resolve(data.data);
				}else{
					reject('token error');
				}
			}).catch((e) => {reject('token error');});
		});
	},
	// 获取基础 token 失败提示函数
	tokenErrorMessage : function(){
		uni.showToast({
			title : "请求失败, 请重试",
			icon  : "none"
		})
	}
}请打开 main.js 添加以下代码,完成请求库全局挂载工作 : 
import App from './App' /* 全局挂载请求库 */ import GraceRequest from '@/Grace6/js/request.js' uni.gRequest = GraceRequest; // 其他代码
<template>
	<gui-page ref="guiPage">
		<template v-slot:gBody >
			<view>
				<text>{{content}}</text>
			</view>
		</template>
	</gui-page>
</template>
<script>
export default{
	data() {
		return {
			content : null,
		}
	},
	onLoad : function(){
		this.requestDemo();
	},
	methods : {
		requestDemo : async function(){
			// 请求前置函数
			uni.gRequest.befor = ()=>{
				uni.showLoading({title:'加载中 ...'});
			}
			// 请求后置函数
			uni.gRequest.after = ()=>{
				uni.hideLoading();
			};
			// GET 请求
			try{
				// 请求成功
				let res = await uni.gRequest.get('srequest/index');
				console.log(res);
				this.content = res;
			}catch(e){
				// 请求失败
				console.log(e);
			}
		}
	}
}
</script>
<style>
</style>