当前位置: 首页 > wzjs >正文

网站的建设运营收费是哪些ppt制作手机版

网站的建设运营收费是哪些,ppt制作手机版,网站开发与网站运营,wordpress左右翻页特效在 uni-app 中封装一个全局通用的 ajax 请求函数,支持 Promise,使用 uni.request() 进行请求,并且具备 自动刷新 token 的功能。以下是详细步骤: 实现步骤 创建 request.js 统一封装 ajax 请求管理 token(存储、获取、…

uni-app 中封装一个全局通用的 ajax 请求函数,支持 Promise,使用 uni.request() 进行请求,并且具备 自动刷新 token 的功能。以下是详细步骤:


实现步骤

  1. 创建 request.js 统一封装 ajax 请求
  2. 管理 token(存储、获取、刷新)
  3. 处理 401(登录过期)自动刷新 token
  4. 防止 token 过期时多个请求同时触发 refresh_token
  5. 错误处理和 Promise 封装

完整代码

创建 utils/request.js 作为 uni.request 的封装:

utils/request.js

// 导入 uni-app 的 storage API
const BASE_URL = 'https://api.example.com'; // 你的后端接口地址let isRefreshing = false; // 是否正在刷新 token
let refreshSubscribers = []; // 存储刷新 token 期间的请求/*** 刷新 token 并返回新的 token*/
function refreshToken() {if (isRefreshing) {// 如果已经在刷新 token,则返回一个等待的 Promisereturn new Promise((resolve) => {refreshSubscribers.push(resolve);});}isRefreshing = true;return new Promise((resolve, reject) => {uni.request({url: `${BASE_URL}/auth/refresh`, // 刷新 token 的 APImethod: 'POST',header: {'Authorization': `Bearer ${uni.getStorageSync('refreshToken')}` // 发送 refreshToken},success: (res) => {if (res.data.code === 200) {const newToken = res.data.data.token;const newRefreshToken = res.data.data.refreshToken;// 存储新的 token 和 refreshTokenuni.setStorageSync('token', newToken);uni.setStorageSync('refreshToken', newRefreshToken);// 让所有等待的请求继续refreshSubscribers.forEach((callback) => callback(newToken));refreshSubscribers = [];resolve(newToken);} else {reject('Refresh Token Failed');}},fail: (err) => reject(err),complete: () => {isRefreshing = false;}});});
}/*** 统一请求封装* @param {Object} options* @param {String} options.url 请求地址(不含 BASE_URL)* @param {String} [options.method='GET'] 请求方法* @param {Object} [options.data={}] 请求参数* @param {Object} [options.header={}] 请求头* @param {Boolean} [options.auth=true] 是否需要携带 token*/
function request({ url, method = 'GET', data = {}, header = {}, auth = true }) {return new Promise((resolve, reject) => {// 获取存储的 tokenlet token = uni.getStorageSync('token');// 组装请求头let finalHeader = {'Content-Type': 'application/json',...header};if (auth && token) {finalHeader['Authorization'] = `Bearer ${token}`;}uni.request({url: `${BASE_URL}${url}`,method,data,header: finalHeader,success: async (res) => {if (res.statusCode === 200) {resolve(res.data);} else if (res.statusCode === 401 && auth) {// token 失效,自动刷新 tokentry {const newToken = await refreshToken();finalHeader['Authorization'] = `Bearer ${newToken}`;// 重新发起请求uni.request({url: `${BASE_URL}${url}`,method,data,header: finalHeader,success: (retryRes) => resolve(retryRes.data),fail: (retryErr) => reject(retryErr)});} catch (error) {reject('登录状态失效,请重新登录');uni.removeStorageSync('token');uni.removeStorageSync('refreshToken');uni.reLaunch({ url: '/pages/login/login' });}} else {reject(res.data);}},fail: (err) => {reject(err);}});});
}export default request;

使用方式

pages/index/index.vue 页面调用封装的 request.js

import request from '../../utils/request.js';request({url: '/user/info',method: 'GET'
}).then(res => {console.log('用户信息:', res);
}).catch(err => {console.error('请求失败:', err);
});

核心功能解读

  1. 支持 Promise,简化 then/catch 处理
  2. 全局 request 统一封装,避免每个请求都写 uni.request
  3. 自动携带 token,401 过期自动刷新
  4. 防止多个请求同时触发 refreshToken,队列处理
  5. refresh_token 失效,清除 token 并跳转到 login 页面

优化建议

  • 错误信息细化:根据后端 code 细分错误(如 403500)。
  • 可配置 BASE_URL:放到 config.js,区分 devprod 环境。
  • 超时处理:可加 setTimeout 限制请求时间。

这样,uni-app 就具备了全局 ajax 请求封装,且能自动刷新 token,提升开发效率! 🚀


文章转载自:

http://BVAjDZuT.Lkxzb.cn
http://nAuhwmvz.Lkxzb.cn
http://Av5AuqER.Lkxzb.cn
http://mASJL8NY.Lkxzb.cn
http://KbjNFyU6.Lkxzb.cn
http://dg80uS4C.Lkxzb.cn
http://liEYKkCy.Lkxzb.cn
http://NvTNLmr2.Lkxzb.cn
http://5fGDbjW3.Lkxzb.cn
http://uWVl8UP9.Lkxzb.cn
http://wixfZtmn.Lkxzb.cn
http://glyBb7pl.Lkxzb.cn
http://sPlgYfnB.Lkxzb.cn
http://YgHTqYdz.Lkxzb.cn
http://cuTMsQ7B.Lkxzb.cn
http://iq1MlnTT.Lkxzb.cn
http://xgGz4VyH.Lkxzb.cn
http://KNuzfsEy.Lkxzb.cn
http://S55NBLHM.Lkxzb.cn
http://r3CAkp1E.Lkxzb.cn
http://UskLy0u8.Lkxzb.cn
http://wWPtsvDn.Lkxzb.cn
http://OzKjzBN0.Lkxzb.cn
http://vXIjnwFj.Lkxzb.cn
http://SAhPY6Lu.Lkxzb.cn
http://127ZDqVb.Lkxzb.cn
http://1Atqhuey.Lkxzb.cn
http://AJFMDw0l.Lkxzb.cn
http://mbxzRQaH.Lkxzb.cn
http://2P1uLiEF.Lkxzb.cn
http://www.dtcms.com/wzjs/631915.html

相关文章:

  • 湛江建站程序35互联网站建设怎么样
  • 怎样做免费外贸网站wordpress的asp版
  • 江苏省建设工程管理局网站wordpress主题 大
  • 做网站域名的设置网站制作大概需要多少钱
  • 学校网站建设流程wordpress创建空白网页
  • 建设部网站继续教育专业百度seo排名优化
  • 新浪网站首页wordpress前端投稿插件
  • 佛山自定义网站建设各大网站投稿邮箱
  • 南阳市宛城区建设局网站seo推广的特点
  • 东莞网站设计品牌公司如何建设一个网站
  • 做网站运营好还是SEO好做酒类直供网站行吗
  • php 公司网站做网站被坑
  • 中国建设工程协会网站微信怎么弄自己的公众号
  • 贵州建设厅考试网站安全员网站建设怎么设计更加吸引人
  • 苏州网站建站aso排名优化
  • 成都网站建设贴吧哪个网站平面设计做的好
  • 中国建设企业银行app下载宁波seo营销
  • 餐饮美食网站源码wordpress表格布局插件
  • 中学网站模板微博嵌入wordpress
  • 江西建设银行官方网站小程序商城哪家好排行榜
  • 建网站公司公司在哪里找给公司做网站优化的人
  • 软件开发网站建设维护运营网站要多少费用
  • 重庆微网站建设哪家好wordpress 去掉骄傲的
  • 邯郸网站建设怎么做免费外贸网站制作
  • 做网站编辑的时候没保存怎么欢迎访问陕西省交通建设集团公司网站
  • 永州市建设网站网站能调用一些字体
  • 网站的推广方案的内容有哪些网站管理员是什么意思
  • 科技网站模板老外做牛排的视频网站
  • 建站教程视频下载可以开发哪些网站
  • 建立网站需要什么设备展馆公司