[{"data":1,"prerenderedAt":750},["ShallowReactive",2],{"navigation":3,"/guide/error-handling":55,"/guide/error-handling-surround":745},[4,25],{"title":5,"path":6,"stem":7,"children":8,"page":24},"快速开始","/guide","1.guide",[9,14,19],{"title":10,"path":11,"stem":12,"icon":13},"快速入门","/guide/getting-started","1.guide/1.getting-started","i-lucide-rocket",{"title":15,"path":16,"stem":17,"icon":18},"认证","/guide/authentication","1.guide/2.authentication","i-lucide-lock",{"title":20,"path":21,"stem":22,"icon":23},"错误处理","/guide/error-handling","1.guide/3.error-handling","i-lucide-alert-triangle",false,{"title":26,"path":27,"stem":28,"children":29,"page":24},"API文档","/api","2.api",[30,35,40,45,50],{"title":31,"path":32,"stem":33,"icon":34},"用户认证","/api/auth","2.api/1.auth","i-lucide-key-round",{"title":36,"path":37,"stem":38,"icon":39},"AI 角色","/api/characters","2.api/2.characters","i-lucide-bot",{"title":41,"path":42,"stem":43,"icon":44},"知识库","/api/knowledge","2.api/3.knowledge","i-lucide-book-open",{"title":46,"path":47,"stem":48,"icon":49},"聊天会话","/api/chat","2.api/4.chat","i-lucide-message-circle",{"title":51,"path":52,"stem":53,"icon":54},"插件","/api/plugins","2.api/5.plugins","i-lucide-puzzle",{"id":56,"title":20,"body":57,"description":738,"extension":739,"links":740,"meta":741,"navigation":742,"path":21,"seo":743,"stem":22,"__hash__":744},"docs/1.guide/3.error-handling.md",{"type":58,"value":59,"toc":731},"minimark",[60,64,68,233,237,377,381,387,404,408,414,510,514,520,727],[61,62,63],"h2",{"id":63},"错误响应格式",[65,66,67],"p",{},"当请求失败时，API 返回以下格式：",[69,70,75],"pre",{"className":71,"code":72,"language":73,"meta":74,"style":74},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"success\": false,\n  \"code\": \"VALIDATION_ERROR\",\n  \"message\": \"验证失败\",\n  \"data\": null,\n  \"errors\": {\n    \"email\": \"邮箱格式不正确\"\n  },\n  \"timestamp\": \"2026-01-15T08:30:00Z\"\n}\n","json","",[76,77,78,87,106,129,150,165,180,202,208,227],"code",{"__ignoreMap":74},[79,80,83],"span",{"class":81,"line":82},"line",1,[79,84,86],{"class":85},"sMK4o","{\n",[79,88,90,93,97,100,103],{"class":81,"line":89},2,[79,91,92],{"class":85},"  \"",[79,94,96],{"class":95},"spNyl","success",[79,98,99],{"class":85},"\"",[79,101,102],{"class":85},":",[79,104,105],{"class":85}," false,\n",[79,107,109,111,113,115,117,120,124,126],{"class":81,"line":108},3,[79,110,92],{"class":85},[79,112,76],{"class":95},[79,114,99],{"class":85},[79,116,102],{"class":85},[79,118,119],{"class":85}," \"",[79,121,123],{"class":122},"sfazB","VALIDATION_ERROR",[79,125,99],{"class":85},[79,127,128],{"class":85},",\n",[79,130,132,134,137,139,141,143,146,148],{"class":81,"line":131},4,[79,133,92],{"class":85},[79,135,136],{"class":95},"message",[79,138,99],{"class":85},[79,140,102],{"class":85},[79,142,119],{"class":85},[79,144,145],{"class":122},"验证失败",[79,147,99],{"class":85},[79,149,128],{"class":85},[79,151,153,155,158,160,162],{"class":81,"line":152},5,[79,154,92],{"class":85},[79,156,157],{"class":95},"data",[79,159,99],{"class":85},[79,161,102],{"class":85},[79,163,164],{"class":85}," null,\n",[79,166,168,170,173,175,177],{"class":81,"line":167},6,[79,169,92],{"class":85},[79,171,172],{"class":95},"errors",[79,174,99],{"class":85},[79,176,102],{"class":85},[79,178,179],{"class":85}," {\n",[79,181,183,186,190,192,194,196,199],{"class":81,"line":182},7,[79,184,185],{"class":85},"    \"",[79,187,189],{"class":188},"sBMFI","email",[79,191,99],{"class":85},[79,193,102],{"class":85},[79,195,119],{"class":85},[79,197,198],{"class":122},"邮箱格式不正确",[79,200,201],{"class":85},"\"\n",[79,203,205],{"class":81,"line":204},8,[79,206,207],{"class":85},"  },\n",[79,209,211,213,216,218,220,222,225],{"class":81,"line":210},9,[79,212,92],{"class":85},[79,214,215],{"class":95},"timestamp",[79,217,99],{"class":85},[79,219,102],{"class":85},[79,221,119],{"class":85},[79,223,224],{"class":122},"2026-01-15T08:30:00Z",[79,226,201],{"class":85},[79,228,230],{"class":81,"line":229},10,[79,231,232],{"class":85},"}\n",[61,234,236],{"id":235},"http-状态码","HTTP 状态码",[238,239,240,253],"table",{},[241,242,243],"thead",{},[244,245,246,250],"tr",{},[247,248,249],"th",{},"状态码",[247,251,252],{},"说明",[254,255,256,267,277,287,297,307,317,327,337,347,357,367],"tbody",{},[244,257,258,264],{},[259,260,261],"td",{},[76,262,263],{},"200",[259,265,266],{},"请求成功",[244,268,269,274],{},[259,270,271],{},[76,272,273],{},"201",[259,275,276],{},"资源创建成功",[244,278,279,284],{},[259,280,281],{},[76,282,283],{},"204",[259,285,286],{},"资源删除成功",[244,288,289,294],{},[259,290,291],{},[76,292,293],{},"400",[259,295,296],{},"请求参数错误",[244,298,299,304],{},[259,300,301],{},[76,302,303],{},"401",[259,305,306],{},"未认证或 Token 过期",[244,308,309,314],{},[259,310,311],{},[76,312,313],{},"403",[259,315,316],{},"无权限访问",[244,318,319,324],{},[259,320,321],{},[76,322,323],{},"404",[259,325,326],{},"资源不存在",[244,328,329,334],{},[259,330,331],{},[76,332,333],{},"409",[259,335,336],{},"资源冲突",[244,338,339,344],{},[259,340,341],{},[76,342,343],{},"415",[259,345,346],{},"不支持的媒体类型",[244,348,349,354],{},[259,350,351],{},[76,352,353],{},"429",[259,355,356],{},"请求频率超限",[244,358,359,364],{},[259,360,361],{},[76,362,363],{},"500",[259,365,366],{},"服务器内部错误",[244,368,369,374],{},[259,370,371],{},[76,372,373],{},"503",[259,375,376],{},"服务不可用",[61,378,380],{"id":379},"_401-处理","401 处理",[65,382,383,384,386],{},"当收到 ",[76,385,303],{}," 响应时：",[388,389,390,398,401],"ol",{},[391,392,393,394,397],"li",{},"尝试使用 ",[76,395,396],{},"refreshToken"," 刷新 Access Token",[391,399,400],{},"使用新的 Token 重试原始请求",[391,402,403],{},"如果刷新也失败，引导用户重新登录",[61,405,407],{"id":406},"_400-请求参数错误","400 请求参数错误",[65,409,410,411,413],{},"当提交的字段验证失败时，",[76,412,172],{}," 对象包含每个字段的错误信息：",[69,415,417],{"className":71,"code":416,"language":73,"meta":74,"style":74},"{\n  \"success\": false,\n  \"code\": \"VALIDATION_ERROR\",\n  \"message\": \"验证失败\",\n  \"errors\": {\n    \"password\": \"密码长度至少 8 个字符\"\n  }\n}\n",[76,418,419,423,435,453,471,483,501,506],{"__ignoreMap":74},[79,420,421],{"class":81,"line":82},[79,422,86],{"class":85},[79,424,425,427,429,431,433],{"class":81,"line":89},[79,426,92],{"class":85},[79,428,96],{"class":95},[79,430,99],{"class":85},[79,432,102],{"class":85},[79,434,105],{"class":85},[79,436,437,439,441,443,445,447,449,451],{"class":81,"line":108},[79,438,92],{"class":85},[79,440,76],{"class":95},[79,442,99],{"class":85},[79,444,102],{"class":85},[79,446,119],{"class":85},[79,448,123],{"class":122},[79,450,99],{"class":85},[79,452,128],{"class":85},[79,454,455,457,459,461,463,465,467,469],{"class":81,"line":131},[79,456,92],{"class":85},[79,458,136],{"class":95},[79,460,99],{"class":85},[79,462,102],{"class":85},[79,464,119],{"class":85},[79,466,145],{"class":122},[79,468,99],{"class":85},[79,470,128],{"class":85},[79,472,473,475,477,479,481],{"class":81,"line":152},[79,474,92],{"class":85},[79,476,172],{"class":95},[79,478,99],{"class":85},[79,480,102],{"class":85},[79,482,179],{"class":85},[79,484,485,487,490,492,494,496,499],{"class":81,"line":167},[79,486,185],{"class":85},[79,488,489],{"class":188},"password",[79,491,99],{"class":85},[79,493,102],{"class":85},[79,495,119],{"class":85},[79,497,498],{"class":122},"密码长度至少 8 个字符",[79,500,201],{"class":85},[79,502,503],{"class":81,"line":182},[79,504,505],{"class":85},"  }\n",[79,507,508],{"class":81,"line":204},[79,509,232],{"class":85},[61,511,513],{"id":512},"typescript-辅助函数","TypeScript 辅助函数",[65,515,516,519],{},[76,517,518],{},"@momohub/types"," 包提供了错误处理辅助函数：",[69,521,525],{"className":522,"code":523,"language":524,"meta":74,"style":74},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { getApiErrorMessage, getApiErrorCode } from '@momohub/types'\n\ntry {\n  const res = await $fetch('/characters', { method: 'POST', body })\n} catch (error) {\n  const message = getApiErrorMessage(error, '操作失败')\n  const code = getApiErrorCode(error)\n  console.error(`[${code}] ${message}`)\n}\n","typescript",[76,526,527,560,566,573,629,642,669,686,723],{"__ignoreMap":74},[79,528,529,533,536,540,543,546,549,552,555,557],{"class":81,"line":82},[79,530,532],{"class":531},"s7zQu","import",[79,534,535],{"class":85}," {",[79,537,539],{"class":538},"sTEyZ"," getApiErrorMessage",[79,541,542],{"class":85},",",[79,544,545],{"class":538}," getApiErrorCode",[79,547,548],{"class":85}," }",[79,550,551],{"class":531}," from",[79,553,554],{"class":85}," '",[79,556,518],{"class":122},[79,558,559],{"class":85},"'\n",[79,561,562],{"class":81,"line":89},[79,563,565],{"emptyLinePlaceholder":564},true,"\n",[79,567,568,571],{"class":81,"line":108},[79,569,570],{"class":531},"try",[79,572,179],{"class":85},[79,574,575,578,581,584,587,591,595,598,601,603,605,607,610,612,614,617,619,621,624,626],{"class":81,"line":131},[79,576,577],{"class":95},"  const",[79,579,580],{"class":538}," res",[79,582,583],{"class":85}," =",[79,585,586],{"class":531}," await",[79,588,590],{"class":589},"s2Zo4"," $fetch",[79,592,594],{"class":593},"swJcz","(",[79,596,597],{"class":85},"'",[79,599,600],{"class":122},"/characters",[79,602,597],{"class":85},[79,604,542],{"class":85},[79,606,535],{"class":85},[79,608,609],{"class":593}," method",[79,611,102],{"class":85},[79,613,554],{"class":85},[79,615,616],{"class":122},"POST",[79,618,597],{"class":85},[79,620,542],{"class":85},[79,622,623],{"class":538}," body",[79,625,548],{"class":85},[79,627,628],{"class":593},")\n",[79,630,631,634,637,640],{"class":81,"line":152},[79,632,633],{"class":85},"}",[79,635,636],{"class":531}," catch",[79,638,639],{"class":538}," (error) ",[79,641,86],{"class":85},[79,643,644,646,649,651,653,655,658,660,662,665,667],{"class":81,"line":167},[79,645,577],{"class":95},[79,647,648],{"class":538}," message",[79,650,583],{"class":85},[79,652,539],{"class":589},[79,654,594],{"class":593},[79,656,657],{"class":538},"error",[79,659,542],{"class":85},[79,661,554],{"class":85},[79,663,664],{"class":122},"操作失败",[79,666,597],{"class":85},[79,668,628],{"class":593},[79,670,671,673,676,678,680,682,684],{"class":81,"line":182},[79,672,577],{"class":95},[79,674,675],{"class":538}," code",[79,677,583],{"class":85},[79,679,545],{"class":589},[79,681,594],{"class":593},[79,683,657],{"class":538},[79,685,628],{"class":593},[79,687,688,691,694,696,698,701,704,707,709,711,714,716,718,721],{"class":81,"line":204},[79,689,690],{"class":538},"  console",[79,692,693],{"class":85},".",[79,695,657],{"class":589},[79,697,594],{"class":593},[79,699,700],{"class":85},"`",[79,702,703],{"class":122},"[",[79,705,706],{"class":85},"${",[79,708,76],{"class":538},[79,710,633],{"class":85},[79,712,713],{"class":122},"] ",[79,715,706],{"class":85},[79,717,136],{"class":538},[79,719,720],{"class":85},"}`",[79,722,628],{"class":593},[79,724,725],{"class":81,"line":210},[79,726,232],{"class":85},[728,729,730],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":74,"searchDepth":82,"depth":89,"links":732},[733,734,735,736,737],{"id":63,"depth":89,"text":63},{"id":235,"depth":89,"text":236},{"id":379,"depth":89,"text":380},{"id":406,"depth":89,"text":407},{"id":512,"depth":89,"text":513},"API 错误码和错误响应格式","md",null,{},{"icon":23},{"title":20,"description":738},"IhZqrXy-Q7WpfP4sE2VEROBYQ6IasFkK64fg-V7F4wI",[746,748],{"title":15,"path":16,"stem":17,"description":747,"icon":18,"children":-1},"Token 认证机制和刷新流程",{"title":31,"path":32,"stem":33,"description":749,"icon":34,"children":-1},"用户认证相关 API",1772535254109]