feat(panel web): 调试日志——api() 每请求计时/失败详录(NOT_JSON 附原始内容头 300B)+route 切换日志,控制台过滤 [mp]

This commit is contained in:
AskaEth committed 2026-09-02 08:07:16 +08:00
1 parent 908fc53805
commit 7a405866af
1 file changed
+21 -1
+21 -1
View File
@@ -136,6 +136,16 @@
$('#offline-banner').hidden = !!ok;
}
/* ---------------- 调试日志(浏览器控制台可见,过滤 [mp]) ---------------- */
function dbg() {
const a = Array.from(arguments);
console.log.apply(console, ['[mp]'].concat(a));
}
function dbgErr() {
const a = Array.from(arguments);
console.warn.apply(console, ['[mp][ERR]'].concat(a));
}
/* ---------------- API 客户端 ---------------- */
// 返回 {code,message,status} 形异常;网络/非 JSON → 视为断连
async function api(method, path, body) {
@@ -151,25 +161,34 @@
init.body = JSON.stringify(body);
}
if (Object.keys(headers).length) init.headers = headers;
const t0 = performance.now();
try {
res = await fetch(path, init);
} catch (e) {
dbgErr(method || 'GET', path, '网络层失败:', e && e.message);
setConn(false);
throw { code: 'NETWORK', message: '后端未连接', status: 0 };
}
const ms = Math.round(performance.now() - t0);
/* 先读原文再解析:非 JSON 时能拿到原始内容前 300 字节进控制台 */
let text = '';
try { text = await res.text(); } catch (e) { /* 读体失败走 NOT_JSON */ }
let json = null;
try { json = await res.json(); } catch (e) { json = null; }
try { json = text ? JSON.parse(text) : null; } catch (e) { json = null; }
if (!json || typeof json.ok !== 'boolean') {
// 静态服务器返回 HTML / 404 等
dbgErr(method || 'GET', path, 'HTTP', res.status, ms + 'ms', '非 JSON 响应, 原始内容头:', text.slice(0, 300));
setConn(res.ok ? true : false);
throw { code: 'NOT_JSON', message: '后端返回了非 JSON 响应(HTTP ' + res.status + ')', status: res.status };
}
if (!json.ok) {
setConn(true);
const code = (json.error && json.error.code) || 'ERROR';
dbgErr(method || 'GET', path, 'HTTP', res.status, ms + 'ms', '后端错误:', code, (json.error && json.error.message) || '');
if (code === 'UNAUTHORIZED') authRequired(); // 会话失效/未认证 → 弹登录页
throw { code: code, message: (json.error && json.error.message) || ('后端错误 ' + code), status: res.status };
}
if (ms > 800) dbg(method || 'GET', path, '慢响应', ms + 'ms');
setConn(true);
return json.data;
}
@@ -2321,6 +2340,7 @@
const id = (location.hash || '#/home').replace('#/', '').split('?')[0] || 'home';
const r = ROUTES[id] || ROUTES.home;
state.route = id;
dbg('route →', id);
stopPerf();
stopAudio();
stopNet();