RuoYi 移动端跑起来但一直提示“无效会话“?记一次移动端联调全过程 📅 2026/7/13 15:21:58 若依RuoYi的移动端模板RuoYi-App用的人挺多但真拉下来跑通并不容易。这篇记录一下我第一次联调时遇到的所有坑一路踩下来花了大半天。技术栈uni-app HBuilderX 若依 App 模板 若依后端 v2.5.15。场景后端已经在本地跑起来了端口 88。前端 HBuilderX 里打开项目运行到 Chrome页面能出来但一操作就各种报错有时候提示无效会话有时候接口 500有时候直接ERR_CONNECTION_REFUSED一开始以为是后端问题后来发现是前端连环坑。坑 1前端 baseUrl 配错压根没连上后端先在utils/request.js里加日志把每个请求的 URL 打印出来service.interceptors.request.use(config { console.log( 请求 URL , config.baseURL config.url); console.log( Token , getToken()); return config; });打开 Chrome F12 看 请求 URL http://localhost:8080/login Failed to load resource: net::ERR_CONNECTION_REFUSED后端明明跑在 88 端口前端却往 8080 打。找到config.jsmodule.exports { baseUrl: http://localhost:8080, // ← 错的 }改成module.exports { baseUrl: http://127.0.0.1:88, }顺便说一下这里不要用localhost:88用127.0.0.1:88。坑 2localhost:88 被浏览器安全拦截改成localhost:88之后还是不行Chrome 里报了个奇怪的错net::ERR_UNSAFE_PORTChrome 有一批不安全端口是默认拒绝访问的localhost域名下访问某些端口会被拦。改用127.0.0.1就能绕过。这个坑挺阴的网上不查根本想不到是浏览器搞的鬼。坑 3pages.json 首页顺序错了跳过了登录流程改完 baseUrl 请求终于发出去了但接口一直报无效会话。再看请求日志 请求 URL http://127.0.0.1:88/school/evaluationResult/list Token undefinedToken 是 undefined怪不得无效会话。去看pages.json{ pages: [ { path: pages/home_page, ... }, // ← 第一个 { path: pages/login, ... } ] }pages.json里的第一个页面就是启动页。前人把home_page放在第一个进来直接就是业务页登录流程被完全跳过。Token 从来没设置过请求当然带不上。修复首页顺序调整{ pages: [ { path: pages/login, ... }, // ← 登录页放第一 { path: pages/home_page, ... } ] }再加个未登录拦截防止用户直接访问业务页// home_page.vue onLoad() { if (!getToken()) { uni.reLaunch({ url: /pages/login }); return; } this.loadData(); }坑 4并行调多个接口字典还没加载完列表就查了登录能正常进去了但首页列表接口偶尔报 500。看后端日志NullPointerException: dictType is null去看首页初始化代码created() { this.loadDict(); // 加载字典 this.loadTaskList(); // 查任务列表列表查询需要字典参数 }两个方法都是 async 的Vue 生命周期里同时调用是并行执行字典还没加载完列表查询就发出去了。列表接口里要拿字典值做过滤字典还是空的就 NPE 了。修复改成 async/await 串行async created() { if (!getToken()) { uni.reLaunch({ url: /pages/login }); return; } try { // 先加载字典 await this.loadDict(); // 字典好了再查列表 await this.loadTaskList(); } catch (e) { console.error(初始化失败, e); } }终于跑通了前后 4 个坑每个都卡半天。回头看几个错误一环套一环baseUrl 错 → 请求发不出去浏览器拦截 → 请求发不出去换 IP 绕过首页跳过登录 → Token 拿不到接口并行调 → 依赖没加载完就查一些通用经验联调阶段的排查手段1. 前端请求前打全套日志service.interceptors.request.use(config { console.log(URL:, config.baseURL config.url); console.log(Method:, config.method); console.log(Token:, getToken()); console.log(Params:, config.params || config.data); return config; });大部分联调问题看这几行日志就能定位。2. 后端启动时netstat看实际端口# Windowsnetstat -ano | findstr LISTEN# Mac/Linuxlsof -i -P | grep LISTEN别信配置文件看实际监听端口。SpringBoot 有时候会因为端口占用自动切换到其他端口。3.localhost和127.0.0.1不完全等价大多数情况可以互换但涉及浏览器安全策略、跨域、host 配置的时候两者行为可能不同。联调优先用127.0.0.1稳定。4.pages.json的第一个页面就是启动页改路由的时候留意这条别把业务页放第一个。5. 有依赖关系的异步接口用 async/await 串行Promise.all只适合互相独立的请求。有先后依赖就老老实实 await。最后RuoYi 移动端本身没什么问题坑主要在环境配置和启动流程上。第一次跑通之后后面就顺了。写在这里主要是给下一个第一次跑这个模板的人省点时间。