2.0 KiB
2.0 KiB
新项目路由与部署规则(多租户路径前缀)
1. 路由总览
1.1 约定
- 租户前缀:
/t/:tenant_code/(不区分大小写;服务端统一按lower()识别) - API:
/t/:tenant_code/v1/... - Admin SPA:
/t/:tenant_code/admin/... - WeChat SPA:
/t/:tenant_code/...(除v1与admin子路径)
1.2 为什么必须这样分层
- WeChat/后台前端都是 SPA,通常需要一个 catch-all 回退到
index.html - 同时 API 又需要精确匹配,必须确保 API 路由优先于静态路由
2. 后端(HTTP Server)路由注册顺序建议
以 Fiber 为例,推荐顺序:
GET /t/:tenant_code/v1/...:注册所有 API(并注入 TenantContext 中间件)GET /t/:tenant_code/admin*:回退到 Admin 的index.html(并正确设置静态资源 base)GET /t/:tenant_code/*:回退到 WeChat 的index.html
重点:不要用全局
GET /*直接接管,否则会吞掉 API 与 admin。
3. 前端(Admin)
3.1 Router base
createWebHistory("/t/<tenant_code>/admin/")
3.2 API baseURL 推导
- 运行时从
location.pathname提取tenant_code - axios
baseURL = "/t/<tenant_code>/v1"
3.3 Token
Authorization: Bearer <token>(租户后台登录返回)
4. 前端(WeChat H5)
4.1 Router base
createWebHistory("/t/<tenant_code>/")
4.2 API baseURL 与 Cookie
- axios
baseURL = "/t/<tenant_code>/v1" withCredentials = true(携带 cookie 会话)
4.3 未登录跳转
- 401 时跳:
/t/<tenant_code>/v1/auth/wechat?redirect=<encodeURIComponent(currentUrl)>
5. tenant_code 提取规则(前端共用)
从路径 /t/<tenant_code>/... 提取第二段:
tenant_code = decodeURIComponent(pathname.split('/')[2] || '')- 使用时建议
tenant_code.toLowerCase() - 允许字符集:
a-z0-9_-(不允许空)
6. OSS Key 规则
- 统一格式:
quyun/<tenant_uuid>/<md5>.<ext> tenant_uuid来自tenants.tenant_uuidmd5来自上传文件内容 hash