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>