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>