From d4a88c79d7513d1fa5003ba6c069dc9491b56efa Mon Sep 17 00:00:00 2001 From: tangxinyue <524779910@qq.com> Date: Fri, 24 Jul 2026 16:43:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=92=A4=E9=94=80=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- log/server.log | 38 ++++++++++++++ service/core/router/index.cjs | 78 ++++++++++------------------- src/api/index.js | 2 +- src/components/common/AppHeader.vue | 4 -- src/main.js | 9 ---- src/router/index.js | 26 +--------- vite.config.js | 5 -- 7 files changed, 66 insertions(+), 96 deletions(-) diff --git a/log/server.log b/log/server.log index 6e3aa77..f947357 100644 --- a/log/server.log +++ b/log/server.log @@ -148,3 +148,41 @@ [2026-07-24 16:00:28,636] [INFO] [unknow:0] GET 200 /favicon.ico [2026-07-24 16:00:28,753] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user?nonce=687eeb5a709fe2ec7af8cf0e43588b6d&signature=41e9223fbe52216889f8597190bfcf17×tamp=1784880028 [2026-07-24 16:00:28,754] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user/config?nonce=e2c74882b519e4afbc46648242cdc524&signature=cdd7b9762921b5e8133552f841286224×tamp=1784880028 +[2026-07-24 16:14:55,889] [INFO] [unknow:0] GET 200 /gongzidan +[2026-07-24 16:14:55,927] [INFO] [unknow:0] GET 200 /.well-known/appspecific/com.chrome.devtools.json +[2026-07-24 16:14:56,121] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-24 16:14:56,200] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user?nonce=4d024e9d224606b23175921343ac2adc&signature=291c7e7b13c5a1632def47a4bc93108f×tamp=1784880896 +[2026-07-24 16:14:56,202] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user/config?nonce=18bef3b4556cebb6ca3c416b0fe7b007&signature=e4957786065607efef17b8ee370dbc0d×tamp=1784880896 +[2026-07-24 16:14:59,376] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] POST 200 /api/weixin/qrcode?nonce=8bcb728f3e26b6cb4e645a6389746fb2&signature=11e6b0a5393136842aa145b901d56f72×tamp=1784880899 +[2026-07-24 16:15:04,387] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] POST 200 /api/user/code?nonce=a28773c46366900306c91f8bccdd63a2&signature=34ba29f5c366de600b855578bbdcc8cc×tamp=1784880904 +[2026-07-24 16:15:30,082] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] POST 200 /api/user/login?nonce=73283f40e37c37d01635b58dbcca8cc8&signature=ef10f4edd357802edc72235c90229c4f×tamp=1784880930 +[2026-07-24 16:15:30,303] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user?nonce=57bec3e292aab64a6857757e676d7e88&signature=4dcad94000a09ca9fa13fdfa4613f51a×tamp=1784880930 +[2026-07-24 16:15:30,464] [INFO] [unknow:0] GET 200 /gongzidan +[2026-07-24 16:15:30,509] [INFO] [unknow:0] GET 200 /.well-known/appspecific/com.chrome.devtools.json +[2026-07-24 16:15:30,753] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-24 16:15:30,855] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user?nonce=c3b9f7f57240baddf1271e62ad2ad698&signature=900b523098055518ee3a2170dbb771c6×tamp=1784880930 +[2026-07-24 16:15:30,857] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user/config?nonce=6a19798328d69efa183ecfbe57242c89&signature=88d738a97e82cca92f8d75e85d5cc7ee×tamp=1784880930 +[2026-07-24 16:15:37,814] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user?nonce=cf9d84b355d1cbc2e483768adae9b4e5&signature=5b5081b70a993b0f9b785baac0e9a568×tamp=1784880937 +[2026-07-24 16:15:37,816] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-24 16:15:37,951] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/order?nonce=b872d144aa341a74f5255d2e360b45eb&signature=f12913917c9f54eed28604d6b6383cf0&status=2×tamp=1784880937 +[2026-07-24 16:36:27,625] [INFO] [unknow:0] GET 200 /profile +[2026-07-24 16:36:27,677] [INFO] [unknow:0] GET 200 /.well-known/appspecific/com.chrome.devtools.json +[2026-07-24 16:36:27,899] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-24 16:39:32,927] [INFO] [unknow:0] GET 200 /profile +[2026-07-24 16:39:32,958] [INFO] [unknow:0] GET 200 /.well-known/appspecific/com.chrome.devtools.json +[2026-07-24 16:39:33,119] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-24 16:39:33,235] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user?nonce=996138f776ed739d382016dd9121138f&signature=596f2838507509f9a1d65b80e89e9014×tamp=1784882373 +[2026-07-24 16:39:33,236] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user/config?nonce=01498636cf2d7317cf3dd7a86dee6bd5&signature=e8ad28f8472f3e6f8cb11599e42fd756×tamp=1784882373 +[2026-07-24 16:39:35,135] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-24 16:39:38,460] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-24 16:39:40,206] [INFO] [unknow:0] GET 200 /profile +[2026-07-24 16:39:40,245] [INFO] [unknow:0] GET 200 /.well-known/appspecific/com.chrome.devtools.json +[2026-07-24 16:39:40,439] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-24 16:39:40,537] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user?nonce=a210517cffd18aae10251908bbc67a04&signature=e280863cf93c90dba491cbfbc9676c38×tamp=1784882380 +[2026-07-24 16:39:40,540] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user/config?nonce=b29ce1641c70424d6791255cfcad0d17&signature=9d08f695faa78b7e9a34c72204f9a4bb×tamp=1784882380 +[2026-07-24 16:39:40,668] [INFO] [unknow:0] GET 200 /profile +[2026-07-24 16:39:40,703] [INFO] [unknow:0] GET 200 /.well-known/appspecific/com.chrome.devtools.json +[2026-07-24 16:39:40,860] [INFO] [unknow:0] GET 200 /favicon.ico +[2026-07-24 16:39:40,975] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user?nonce=4bd7d64137781d559df72ea38171d9a8&signature=0f49a895ca87bb476555b7b321a0f0d1×tamp=1784882380 +[2026-07-24 16:39:40,976] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/user/config?nonce=c8fef1211519d80bfd5bb0018c4aa7c6&signature=370cfd624d78ea2b7c121ad572c4ae26×tamp=1784882380 +[2026-07-24 16:39:44,513] [INFO] [D:\AAA-Code\flaunt-web\service\core\router\index.cjs:28] GET 200 /api/order?nonce=e40d8de94b3a4d5b83353f4dcf225981&signature=f421768a835b1d84771415f7fe6ea98f&status=2×tamp=1784882384 diff --git a/service/core/router/index.cjs b/service/core/router/index.cjs index 073aaee..b93a4da 100644 --- a/service/core/router/index.cjs +++ b/service/core/router/index.cjs @@ -72,9 +72,7 @@ function getMimeType(filePath) { woff: 'font/woff', woff2: 'font/woff2', ttf: 'font/ttf', - otf: 'font/otf', - dat: 'application/octet-stream', - wasm: 'application/wasm' + otf: 'font/otf' } if (ext && defaultMimes[ext]) { return defaultMimes[ext] @@ -88,51 +86,14 @@ function getMimeType(filePath) { const matchFile = async (request, response) => { return new Promise((resolve) => { const cleanPath = decodeURIComponent(request.url.split('?')[0]) - let targetPath = dist + cleanPath - if (!fs.existsSync(targetPath)) { - const mappedPath = dist + cleanPath.replace(/^\/(src\/public|public|src)/, '') - if (fs.existsSync(mappedPath)) { - targetPath = mappedPath - } else if (cleanPath.startsWith('/assets/')) { - // 如果请求的是带 hash 的旧文件,尝试摘除 -[hash] 请求固定文件 - const filename = cleanPath.split('/').pop() - const parts = filename.split('.') - const ext = parts.pop() - const nameParts = parts.join('.').split('-') - if (nameParts.length > 1) { - nameParts.pop() // 移除最后的 hash - const baseName = nameParts.join('-') - const fallbackPath = dist + '/assets/' + baseName + '.' + ext - if (fs.existsSync(fallbackPath)) { - targetPath = fallbackPath - } else { - response.writeHead(404, { 'Content-Type': 'text/plain' }) - response.end('Asset Not Found') - resolve(true) - return - } - } else { - response.writeHead(404, { 'Content-Type': 'text/plain' }) - response.end('Asset Not Found') - resolve(true) - return - } - } - } - fs.readFile(targetPath, (err, file) => { + fs.readFile(dist + cleanPath, (err, file) => { if (!err) { const mimetype = getMimeType(cleanPath) - const responseHeaders = { - 'Content-Type': mimetype, - 'Access-Control-Allow-Origin': '*' + const responseHdeaders = { 'Content-Type': mimetype } + if (cleanPath.endsWith("-sw.js")) { + responseHdeaders["Service-Worker-Allowed"] = '/' } - if (cleanPath.endsWith(".js") || cleanPath.endsWith(".css") || cleanPath.endsWith("-sw.js") || cleanPath.includes("dat-module-map.json")) { - responseHeaders["Service-Worker-Allowed"] = '/' - responseHeaders["Cache-Control"] = 'no-cache, no-store, must-revalidate' - responseHeaders["Pragma"] = 'no-cache' - responseHeaders["Expires"] = '0' - } - response.writeHead(httpOk, responseHeaders) + response.writeHead(httpOk, responseHdeaders) response.end(file) // logger.info(`${request.method} ${httpOk} ${request.url}`) resolve(true) @@ -147,13 +108,7 @@ const endIndex = async (request, response) => { console.log(dist + '/index.html') fs.readFile(dist + '/index.html', (err, html) => { if (!err) { - response.writeHead(httpOk, { - 'Content-type': 'text/html;charset=utf-8', - 'Cache-Control': 'no-cache, no-store, must-revalidate', - 'Pragma': 'no-cache', - 'Expires': '0', - 'Access-Control-Allow-Origin': '*' - }) + response.writeHead(httpOk, { 'Content-type': 'text/html;charset=utf-8' }) response.end(html) logger.info(`${request.method} ${httpOk} ${request.url}`) } @@ -190,6 +145,25 @@ const httpService = async (request, response) => { logger.info(`${request.method} ${httpBadRequest} ${request.url}`) } } +module.exports = { + httpService, + matchType, + matchRouter, + matchFile, + endIndex, + matchProxy, +} + } catch (e) { + response.writeHead(httpBadRequest, { 'Content-Type': 'application/json' }) + response.end( + JSON.stringify({ + code: -1, + message: String(e) + }) + ) + logger.info(`${request.method} ${httpBadRequest} ${request.url}`) +} +} module.exports = { httpService, matchType, diff --git a/src/api/index.js b/src/api/index.js index e9b497e..e4e7889 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -23,7 +23,7 @@ http.interceptors.response.use( userStore.reset() // _noRedirect 标记:静默验证时不跳转(避免注册/登录页被重定向) if (!err.config?._noRedirect) { - router.push({ path: '/', query: { showLogin: 1 } }) + router.push('/login') } return Promise.reject(err) } diff --git a/src/components/common/AppHeader.vue b/src/components/common/AppHeader.vue index e035b92..c45395b 100644 --- a/src/components/common/AppHeader.vue +++ b/src/components/common/AppHeader.vue @@ -200,10 +200,6 @@ async function handleCommand(cmd) { } router.push('/works') } else if (cmd === 'profile') { - if (!isLoggedIn.value) { - loginDialogRef.value?.open() - return - } router.push('/profile') } else if (cmd === 'vip') { showPayment?.() diff --git a/src/main.js b/src/main.js index 66ed635..c77fe4e 100644 --- a/src/main.js +++ b/src/main.js @@ -1,12 +1,3 @@ -// 自动清理可能残留的旧版 ServiceWorker 缓存,保障最新代码 Chunk 正常加载 -if (typeof window !== 'undefined' && 'serviceWorker' in navigator) { - navigator.serviceWorker.getRegistrations().then(registrations => { - for (const registration of registrations) { - registration.unregister() - } - }).catch(() => {}) -} - import { createApp } from 'vue' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' diff --git a/src/router/index.js b/src/router/index.js index fb51863..5baa6a0 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -38,6 +38,7 @@ router.beforeEach(async (to, from, next) => { // 不需要认证的页面,直接放行 if (!to.meta.requiresAuth) return next() + // 需要认证的页面:如果没有 token 或者 token 已失效,跳回首页并唤起登录框 if (!token || !userStore.tokenValid) { return next({ path: '/', query: { showLogin: 1 } }) } @@ -45,29 +46,4 @@ router.beforeEach(async (to, from, next) => { next() }) -router.onError((error) => { - const pattern = /Failed to fetch dynamically imported module|Importing a module script failed/i - if (pattern.test(error?.message || '')) { - const isReloaded = sessionStorage.getItem('chunk_reload_flag') - if (!isReloaded) { - sessionStorage.setItem('chunk_reload_flag', 'true') - const forceReload = () => { - const url = new URL(window.location.href) - url.searchParams.set('t', Date.now()) - window.location.href = url.href - } - if ('serviceWorker' in navigator) { - navigator.serviceWorker.getRegistrations().then(registrations => { - for (const registration of registrations) { - registration.unregister() - } - forceReload() - }).catch(() => { forceReload() }) - } else { - forceReload() - } - } - } -}) - export default router diff --git a/vite.config.js b/vite.config.js index e2cfe3b..369958c 100644 --- a/vite.config.js +++ b/vite.config.js @@ -41,11 +41,6 @@ export default defineConfig({ build: { chunkSizeWarningLimit: 2000, rollupOptions: { - output: { - entryFileNames: 'assets/[name].js', - chunkFileNames: 'assets/[name].js', - assetFileNames: 'assets/[name].[ext]' - }, onwarn(warning, warn) { if (warning.code === 'UNRESOLVED_IMPORT' || warning.code === 'UNUSED_EXTERNAL_IMPORT') return; warn(warning);