uni-app页面发布测试环境出现连接服务器超时,点击屏幕重试解决方案

问题分析:

有一种情况时必现:

用户一直在访问这个网站,停留在A页面;B页面没有访问过;

服务器更新后,用户准备打开B页面,这时必现;

用户一打开网站缓存了网站的页面路由映射关系,服务器更新后,用户访问的是缓存的映射关系,所以服务器端找不到文件;
解决方案:

1、可以使用不缓存的方式解决

2、通过代码捕捉错误的方式解决

【1】代码解决在App.vue通过onError 捕捉错误

复制代码
  import versionChecker from '@/utils/versionChecker.js';
  // 捕获 app error
  onError (err) {
    // 页面显示时检测版本更新
    versionChecker.checkVersion();
  },

2、在versionChecker.js实现检测逻辑这里有很多种,可以自己写弹框的方式让用户触发刷新也可以自动刷新 versionChecker.js

复制代码
import { getCurrentVersion, shouldShowUpdateTip } from '../version.js';

/**
 * 全局版本检测器
 */
class VersionChecker {
  constructor() {
    this.hasShownUpdateTip = false;
    this.checkInterval = null;
  }

  /**
   * 检测版本更新
   */
  checkVersion() {
    // #ifdef H5
    try {
      // 如果已经显示过更新提示,不再重复检测
      if (this.hasShownUpdateTip) {
        return;
      }
      const currentVersion = getCurrentVersion();
      const storedVersion = uni.getStorageSync('app_version');
      if (shouldShowUpdateTip(storedVersion)) {
        console.log(`版本更新检测: ${storedVersion} -> ${currentVersion}`);
        this.showVersionUpdateTip();
        this.hasShownUpdateTip = true;
      } else if (!storedVersion) {
        // 首次访问,设置版本号
        uni.setStorageSync('app_version', currentVersion);
        console.log('首次访问,已设置版本号:', currentVersion);
      }
    } catch (error) {
      console.error('版本检测失败:', error);
    }
    // #endif
  }

  /**
   * 显示版本更新提示
   */
  showVersionUpdateTip() {
    // uni.showModal({
    //   title: '版本更新提示',
    //   content: '检测到应用已更新,为确保最佳体验,请刷新页面获取最新版本',
    //   confirmText: '立即刷新',
    //   cancelText: '稍后处理',
    //   success: (res) => {
    //     if (res.confirm) {
    //       // #ifdef H5
    //       try {
    //         uni.setStorageSync('app_version', getCurrentVersion());
    //         console.log('用户确认刷新,已更新版本号');
    //         // 强制刷新页面
    //         window.location.reload(true);
    //       } catch (error) {
    //         console.error('刷新失败:', error);
    //       }
    //       // #endif
    //     } else {
    //       console.log('用户选择稍后处理版本更新');
    //       // 用户选择稍后处理,重置标志,允许在下次页面显示时再次检测
    //       this.hasShownUpdateTip = false;
    //     }
    //   }
    // });
    window.location.reload(true);
  }

  /**
   * 重置检测状态(用于测试或特殊情况)
   */
  resetCheckState() {
    this.hasShownUpdateTip = false;
  }
}

// 创建全局实例
const versionChecker = new VersionChecker();

export default versionChecker;

3、version.js 应用版本配置文件

复制代码
/**
 * 应用版本配置文件
 * 每次发版时请更新此文件中的版本号
 */

// 当前应用版本号
export const APP_VERSION = '1.1.2';

// 获取当前版本号
export function getCurrentVersion() {
  return APP_VERSION;
}

// 检查是否需要显示更新提示
export function shouldShowUpdateTip(storedVersion) {
  return storedVersion && storedVersion !== APP_VERSION;
}

// 版本更新日志(可选)
export const VERSION_CHANGELOG = {
  '1.0.0': [
    '初始版本发布',
    '基础功能实现'
  ]
};

每次发布的时候修改版本号即可,当出现连接服务器超时,点击屏幕重试时候在全局应用函数onError中触发,然后在onError中触发我们的刷新逻辑

相关推荐
文心快码BaiduComate1 分钟前
Comate Spec Mode能力升级:让复杂任务开发更可控、更稳定
前端·后端
前端付豪5 分钟前
实现 AI 回复支持 Markdown 渲染
前端·人工智能·markdown
阳火锅16 分钟前
鳌虾 AoCode:重新定义 AI 编程助手的下一代可视化工具
前端·人工智能·架构
拾贰_C19 分钟前
【node】node彻底卸载删除
前端
TON_G-T20 分钟前
uniapp-解放主包,组件下沉分包插件
webpack·uni-app
SuperEugene20 分钟前
Vue3 组合式函数(Hooks)封装规范实战:命名 / 输入输出 / 复用边界 + 避坑|Vue 组件与模板规范篇
开发语言·前端·javascript·vue.js·前端框架
芝士麻雀23 分钟前
掌握 .claude/ 目录:让 Claude Code 真正懂你的项目
前端·后端
cmd24 分钟前
JS深浅拷贝全解析|常用方法+手写实现+避坑指南(附完整代码)
前端·javascript
进击的尘埃24 分钟前
AbortController 实战:竞态取消、超时兜底与请求生命周期管理
前端·javascript
张一凡9325 分钟前
我用 Zustand 三年了,直到遇见 easy-model...
前端·javascript·react.js