[{"data":1,"prerenderedAt":2102},["ShallowReactive",2],{"navigation":3,"-docs-openapi":402,"-docs-openapi-surround":2097},[4,93,226,231,386,399],{"title":5,"path":6,"stem":7,"children":8,"icon":92},"","\u002Fdocs","1.docs\u002F1.index",[9,12,17,22,27,32,37,42,47,52,57,62,67,72,77,82,87],{"title":10,"path":6,"stem":7,"icon":11},"简介","i-lucide-compass",{"title":13,"path":14,"stem":15,"icon":16},"快速开始","\u002Fdocs\u002Fquick-start","1.docs\u002F2.quick-start","i-lucide-zap",{"title":18,"path":19,"stem":20,"icon":21},"Renderer","\u002Fdocs\u002Frenderer","1.docs\u002F4.renderer","ri:layout-masonry-line",{"title":23,"path":24,"stem":25,"icon":26},"路由","\u002Fdocs\u002Frouting","1.docs\u002F5.routing","ri:direction-line",{"title":28,"path":29,"stem":30,"icon":31},"资源","\u002Fdocs\u002Fassets","1.docs\u002F50.assets","ri:image-2-line",{"title":33,"path":34,"stem":35,"icon":36},"配置","\u002Fdocs\u002Fconfiguration","1.docs\u002F50.configuration","ri:settings-3-line",{"title":38,"path":39,"stem":40,"icon":41},"数据库","\u002Fdocs\u002Fdatabase","1.docs\u002F50.database","ri:database-2-line",{"title":43,"path":44,"stem":45,"icon":46},"生命周期","\u002Fdocs\u002Flifecycle","1.docs\u002F50.lifecycle","i-lucide-layers",{"title":48,"path":49,"stem":50,"icon":51},"OpenAPI","\u002Fdocs\u002Fopenapi","1.docs\u002F50.openapi","ri:contract-line",{"title":53,"path":54,"stem":55,"icon":56},"插件","\u002Fdocs\u002Fplugins","1.docs\u002F50.plugins","ri:plug-line",{"title":58,"path":59,"stem":60,"icon":61},"任务","\u002Fdocs\u002Ftasks","1.docs\u002F50.tasks","codicon:run-all",{"title":63,"path":64,"stem":65,"icon":66},"WebSocket","\u002Fdocs\u002Fwebsocket","1.docs\u002F50.websocket","ri:broadcast-fill",{"title":68,"path":69,"stem":70,"icon":71},"服务端入口","\u002Fdocs\u002Fserver-entry","1.docs\u002F6.server-entry","ri:server-line",{"title":73,"path":74,"stem":75,"icon":76},"缓存","\u002Fdocs\u002Fcache","1.docs\u002F7.cache","ri:speed-line",{"title":78,"path":79,"stem":80,"icon":81},"KV 存储","\u002Fdocs\u002Fstorage","1.docs\u002F8.storage","carbon:datastore",{"title":83,"path":84,"stem":85,"icon":86},"迁移指南","\u002Fdocs\u002Fmigration","1.docs\u002F99.migration","ri:arrow-right-up-line",{"title":88,"path":89,"stem":90,"icon":91},"每日构建通道","\u002Fdocs\u002Fnightly","1.docs\u002F99.nightly","ri:moon-fill","i-lucide-book-open",{"title":94,"path":95,"stem":96,"children":97,"icon":99},"部署","\u002Fdeploy","2.deploy\u002F0.index",[98,100,121],{"title":94,"path":95,"stem":96,"icon":99},"ri:upload-cloud-2-line",{"title":101,"path":102,"stem":103,"children":104,"page":120},"Runtimes","\u002Fdeploy\u002Fruntimes","2.deploy\u002F10.runtimes",[105,110,115],{"title":106,"path":107,"stem":108,"icon":109},"Node.js","\u002Fdeploy\u002Fruntimes\u002Fnode","2.deploy\u002F10.runtimes\u002F1.node","akar-icons:node-fill",{"title":111,"path":112,"stem":113,"icon":114},"Bun","\u002Fdeploy\u002Fruntimes\u002Fbun","2.deploy\u002F10.runtimes\u002Fbun","simple-icons:bun",{"title":116,"path":117,"stem":118,"icon":119},"Deno","\u002Fdeploy\u002Fruntimes\u002Fdeno","2.deploy\u002F10.runtimes\u002Fdeno","simple-icons:deno",false,{"title":122,"path":123,"stem":124,"children":125,"page":120},"Providers","\u002Fdeploy\u002Fproviders","2.deploy\u002F20.providers",[126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222],{"title":127,"path":128,"stem":129},"Alwaysdata","\u002Fdeploy\u002Fproviders\u002Falwaysdata","2.deploy\u002F20.providers\u002Falwaysdata",{"title":131,"path":132,"stem":133},"AWS Lambda","\u002Fdeploy\u002Fproviders\u002Faws","2.deploy\u002F20.providers\u002Faws",{"title":135,"path":136,"stem":137},"AWS Amplify","\u002Fdeploy\u002Fproviders\u002Faws-amplify","2.deploy\u002F20.providers\u002Faws-amplify",{"title":139,"path":140,"stem":141},"Azure","\u002Fdeploy\u002Fproviders\u002Fazure","2.deploy\u002F20.providers\u002Fazure",{"title":143,"path":144,"stem":145},"Cleavr","\u002Fdeploy\u002Fproviders\u002Fcleavr","2.deploy\u002F20.providers\u002Fcleavr",{"title":147,"path":148,"stem":149},"Cloudflare","\u002Fdeploy\u002Fproviders\u002Fcloudflare","2.deploy\u002F20.providers\u002Fcloudflare",{"title":151,"path":152,"stem":153},"Deno Deploy","\u002Fdeploy\u002Fproviders\u002Fdeno-deploy","2.deploy\u002F20.providers\u002Fdeno-deploy",{"title":155,"path":156,"stem":157},"DigitalOcean","\u002Fdeploy\u002Fproviders\u002Fdigitalocean","2.deploy\u002F20.providers\u002Fdigitalocean",{"title":159,"path":160,"stem":161},"EdgeOne Pages","\u002Fdeploy\u002Fproviders\u002Fedgeone","2.deploy\u002F20.providers\u002Fedgeone",{"title":163,"path":164,"stem":165},"Firebase","\u002Fdeploy\u002Fproviders\u002Ffirebase","2.deploy\u002F20.providers\u002Ffirebase",{"title":167,"path":168,"stem":169},"Flightcontrol","\u002Fdeploy\u002Fproviders\u002Fflightcontrol","2.deploy\u002F20.providers\u002Fflightcontrol",{"title":171,"path":172,"stem":173},"Genezio","\u002Fdeploy\u002Fproviders\u002Fgenezio","2.deploy\u002F20.providers\u002Fgenezio",{"title":175,"path":176,"stem":177},"GitHub Pages","\u002Fdeploy\u002Fproviders\u002Fgithub-pages","2.deploy\u002F20.providers\u002Fgithub-pages",{"title":179,"path":180,"stem":181},"GitLab Pages","\u002Fdeploy\u002Fproviders\u002Fgitlab-pages","2.deploy\u002F20.providers\u002Fgitlab-pages",{"title":183,"path":184,"stem":185},"Heroku","\u002Fdeploy\u002Fproviders\u002Fheroku","2.deploy\u002F20.providers\u002Fheroku",{"title":187,"path":188,"stem":189},"IIS","\u002Fdeploy\u002Fproviders\u002Fiis","2.deploy\u002F20.providers\u002Fiis",{"title":191,"path":192,"stem":193},"Koyeb","\u002Fdeploy\u002Fproviders\u002Fkoyeb","2.deploy\u002F20.providers\u002Fkoyeb",{"title":195,"path":196,"stem":197},"Netlify","\u002Fdeploy\u002Fproviders\u002Fnetlify","2.deploy\u002F20.providers\u002Fnetlify",{"title":199,"path":200,"stem":201},"Platform.sh","\u002Fdeploy\u002Fproviders\u002Fplatform-sh","2.deploy\u002F20.providers\u002Fplatform-sh",{"title":203,"path":204,"stem":205},"Render.com","\u002Fdeploy\u002Fproviders\u002Frender","2.deploy\u002F20.providers\u002Frender",{"title":207,"path":208,"stem":209},"StormKit","\u002Fdeploy\u002Fproviders\u002Fstormkit","2.deploy\u002F20.providers\u002Fstormkit",{"title":211,"path":212,"stem":213},"Vercel","\u002Fdeploy\u002Fproviders\u002Fvercel","2.deploy\u002F20.providers\u002Fvercel",{"title":215,"path":216,"stem":217},"Zeabur","\u002Fdeploy\u002Fproviders\u002Fzeabur","2.deploy\u002F20.providers\u002Fzeabur",{"title":219,"path":220,"stem":221},"Zephyr Cloud","\u002Fdeploy\u002Fproviders\u002Fzephyr","2.deploy\u002F20.providers\u002Fzephyr",{"title":223,"path":224,"stem":225},"Zerops","\u002Fdeploy\u002Fproviders\u002Fzerops","2.deploy\u002F20.providers\u002Fzerops",{"title":33,"path":227,"stem":228,"children":229,"icon":36},"\u002Fconfig","3.config\u002F0.index",[230],{"title":33,"path":227,"stem":228,"icon":36},{"title":232,"path":233,"stem":234,"children":235,"icon":237},"示例","\u002Fexamples","4.examples\u002F0.index",[236,238,243,248,253,258,262,267,272,277,282,287,292,296,301,305,309,314,319,324,329,334,339,344,349,354,358,363,368,372,377,382],{"title":232,"path":233,"stem":234,"icon":237},"i-lucide-folder-code",{"title":239,"path":240,"stem":241,"icon":242},"API 路由","\u002Fexamples\u002Fapi-routes","4.examples\u002Fapi-routes","i-lucide-route",{"title":244,"path":245,"stem":246,"icon":247},"自动导入","\u002Fexamples\u002Fauto-imports","4.examples\u002Fauto-imports","i-lucide-import",{"title":249,"path":250,"stem":251,"icon":252},"缓存处理器","\u002Fexamples\u002Fcached-handler","4.examples\u002Fcached-handler","i-lucide-clock",{"title":254,"path":255,"stem":256,"icon":257},"自定义错误处理器","\u002Fexamples\u002Fcustom-error-handler","4.examples\u002Fcustom-error-handler","i-lucide-alert-circle",{"title":38,"path":259,"stem":260,"icon":261},"\u002Fexamples\u002Fdatabase","4.examples\u002Fdatabase","i-lucide-database",{"title":263,"path":264,"stem":265,"icon":266},"Elysia","\u002Fexamples\u002Felysia","4.examples\u002Felysia","i-skill-icons-elysia-dark",{"title":268,"path":269,"stem":270,"icon":271},"Express","\u002Fexamples\u002Fexpress","4.examples\u002Fexpress","i-simple-icons-express",{"title":273,"path":274,"stem":275,"icon":276},"Fastify","\u002Fexamples\u002Ffastify","4.examples\u002Ffastify","i-simple-icons-fastify",{"title":278,"path":279,"stem":280,"icon":281},"你好世界","\u002Fexamples\u002Fhello-world","4.examples\u002Fhello-world","i-lucide-sparkles",{"title":283,"path":284,"stem":285,"icon":286},"Hono","\u002Fexamples\u002Fhono","4.examples\u002Fhono","i-logos-hono",{"title":288,"path":289,"stem":290,"icon":291},"导入别名","\u002Fexamples\u002Fimport-alias","4.examples\u002Fimport-alias","i-lucide-at-sign",{"title":293,"path":294,"stem":295,"icon":46},"中间件","\u002Fexamples\u002Fmiddleware","4.examples\u002Fmiddleware",{"title":297,"path":298,"stem":299,"icon":300},"Mono JSX","\u002Fexamples\u002Fmono-jsx","4.examples\u002Fmono-jsx","i-lucide-brackets",{"title":302,"path":303,"stem":304,"icon":300},"Nano JSX","\u002Fexamples\u002Fnano-jsx","4.examples\u002Fnano-jsx",{"title":53,"path":306,"stem":307,"icon":308},"\u002Fexamples\u002Fplugins","4.examples\u002Fplugins","i-lucide-plug",{"title":310,"path":311,"stem":312,"icon":313},"自定义渲染器","\u002Fexamples\u002Frenderer","4.examples\u002Frenderer","i-lucide-code",{"title":315,"path":316,"stem":317,"icon":318},"运行时配置","\u002Fexamples\u002Fruntime-config","4.examples\u002Fruntime-config","i-lucide-settings",{"title":320,"path":321,"stem":322,"icon":323},"服务端 Fetch","\u002Fexamples\u002Fserver-fetch","4.examples\u002Fserver-fetch","i-lucide-arrow-right-left",{"title":325,"path":326,"stem":327,"icon":328},"Shiki","\u002Fexamples\u002Fshiki","4.examples\u002Fshiki","i-lucide-highlighter",{"title":330,"path":331,"stem":332,"icon":333},"虚拟路由","\u002Fexamples\u002Fvirtual-routes","4.examples\u002Fvirtual-routes","i-lucide-box",{"title":335,"path":336,"stem":337,"icon":338},"Vite Nitro 插件","\u002Fexamples\u002Fvite-nitro-plugin","4.examples\u002Fvite-nitro-plugin","i-logos-vitejs",{"title":340,"path":341,"stem":342,"icon":343},"Vite RSC","\u002Fexamples\u002Fvite-rsc","4.examples\u002Fvite-rsc","i-logos-react",{"title":345,"path":346,"stem":347,"icon":348},"Vite SSR HTML","\u002Fexamples\u002Fvite-ssr-html","4.examples\u002Fvite-ssr-html","i-logos-html-5",{"title":350,"path":351,"stem":352,"icon":353},"使用 Preact 进行 SSR","\u002Fexamples\u002Fvite-ssr-preact","4.examples\u002Fvite-ssr-preact","i-logos-preact",{"title":355,"path":356,"stem":357,"icon":343},"使用 React 进行 SSR","\u002Fexamples\u002Fvite-ssr-react","4.examples\u002Fvite-ssr-react",{"title":359,"path":360,"stem":361,"icon":362},"SolidJS 服务端渲染","\u002Fexamples\u002Fvite-ssr-solid","4.examples\u002Fvite-ssr-solid","i-logos-solidjs-icon",{"title":364,"path":365,"stem":366,"icon":367},"使用 TanStack Router 的 SSR","\u002Fexamples\u002Fvite-ssr-tsr-react","4.examples\u002Fvite-ssr-tsr-react","i-simple-icons-tanstack",{"title":369,"path":370,"stem":371,"icon":367},"使用 TanStack Start 进行 SSR","\u002Fexamples\u002Fvite-ssr-tss-react","4.examples\u002Fvite-ssr-tss-react",{"title":373,"path":374,"stem":375,"icon":376},"基于 Vue Router 的 SSR","\u002Fexamples\u002Fvite-ssr-vue-router","4.examples\u002Fvite-ssr-vue-router","i-logos-vue",{"title":378,"path":379,"stem":380,"icon":381},"Vite + tRPC","\u002Fexamples\u002Fvite-trpc","4.examples\u002Fvite-trpc","i-simple-icons-trpc",{"title":63,"path":383,"stem":384,"icon":385},"\u002Fexamples\u002Fwebsocket","4.examples\u002Fwebsocket","i-lucide-radio",{"title":387,"path":388,"stem":389,"children":390},"Blog","\u002Fblog","9.blog",[391,395],{"title":392,"path":388,"stem":393,"icon":394},"博客","9.blog\u002Findex","i-lucide-file-text",{"title":396,"path":397,"stem":398,"icon":394},"Nitro v3 测试版已发布！","\u002Fblog\u002Fv3-beta","9.blog\u002F1.v3-beta",{"title":5,"path":400,"stem":401},"\u002F","index",{"id":403,"title":48,"body":404,"description":2091,"extension":2092,"meta":2093,"navigation":2094,"path":49,"seo":2095,"stem":50,"__hash__":2096},"content\u002F1.docs\u002F50.openapi.md",{"type":405,"value":406,"toc":2076,"icon":51},"minimark",[407,436,442,447,450,539,542,591,594,610,745,753,757,772,993,1003,1007,1014,1217,1220,1235,1509,1520,1523,1526,1568,1578,1580,1586,1684,1689,1696,1755,1760,1770,1773,1810,1815,1818,1901,1910,1954,1959,1962,1969,2006,2054,2066,2072],[408,409,410,411,415,416,423,424,429,430,435],"p",{},"Nitro 会扫描所有路由处理器，提取通过 ",[412,413,414],"code",{},"defineRouteMeta"," 定义的元数据，并生成一份 ",[417,418,422],"a",{"href":419,"rel":420},"https:\u002F\u002Fspec.openapis.org\u002Foas\u002Fv3.1.0",[421],"nofollow","OpenAPI 3.1.0"," 规范。内置的 ",[417,425,428],{"href":426,"rel":427},"https:\u002F\u002Fscalar.com\u002F",[421],"Scalar"," 和 ",[417,431,434],{"href":432,"rel":433},"https:\u002F\u002Fswagger.io\u002Ftools\u002Fswagger-ui\u002F",[421],"Swagger UI"," 界面让你可以直接在浏览器中浏览并测试 API。",[437,438,439],"important",{},[408,440,441],{},"\nOpenAPI 支持目前仍处于实验阶段。",[443,444,446],"h2",{"id":445},"启用-openapi","启用 OpenAPI",[408,448,449],{},"在 Nitro 配置中启用 OpenAPI：",[451,452,453],"code-group",{},[454,455,460],"pre",{"className":456,"code":457,"filename":458,"language":459,"meta":5,"style":5},"language-ts shiki shiki-themes github-light github-dark github-dark","import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  experimental: {\n    openAPI: true,\n  },\n});\n","nitro.config.ts","ts",[412,461,462,485,492,508,514,527,533],{"__ignoreMap":5},[463,464,467,471,475,478,482],"span",{"class":465,"line":466},"line",1,[463,468,470],{"class":469},"so5gQ","import",[463,472,474],{"class":473},"slsVL"," { defineConfig } ",[463,476,477],{"class":469},"from",[463,479,481],{"class":480},"sfrk1"," \"nitro\"",[463,483,484],{"class":473},";\n",[463,486,488],{"class":465,"line":487},2,[463,489,491],{"emptyLinePlaceholder":490},true,"\n",[463,493,495,498,501,505],{"class":465,"line":494},3,[463,496,497],{"class":469},"export",[463,499,500],{"class":469}," default",[463,502,504],{"class":503},"shcOC"," defineConfig",[463,506,507],{"class":473},"({\n",[463,509,511],{"class":465,"line":510},4,[463,512,513],{"class":473},"  experimental: {\n",[463,515,517,520,524],{"class":465,"line":516},5,[463,518,519],{"class":473},"    openAPI: ",[463,521,523],{"class":522},"suiK_","true",[463,525,526],{"class":473},",\n",[463,528,530],{"class":465,"line":529},6,[463,531,532],{"class":473},"  },\n",[463,534,536],{"class":465,"line":535},7,[463,537,538],{"class":473},"});\n",[408,540,541],{},"启用后，开发环境中会提供以下端点：",[543,544,545,558],"table",{},[546,547,548],"thead",{},[549,550,551,555],"tr",{},[552,553,554],"th",{},"端点",[552,556,557],{},"说明",[559,560,561,572,582],"tbody",{},[549,562,563,569],{},[564,565,566],"td",{},[412,567,568],{},"\u002F_openapi.json",[564,570,571],{},"OpenAPI 3.1.0 JSON 规范",[549,573,574,579],{},[564,575,576],{},[412,577,578],{},"\u002F_scalar",[564,580,581],{},"Scalar API 参考界面",[549,583,584,589],{},[564,585,586],{},[412,587,588],{},"\u002F_swagger",[564,590,434],{},[443,592,593],{"id":593},"路由元数据",[408,595,596,597,599,600,603,604,609],{},"在路由处理器文件中使用 ",[412,598,414],{}," 宏，为每个路由提供 OpenAPI 元数据。",[412,601,602],{},"openAPI"," 属性接收标准的 OpenAPI ",[417,605,608],{"href":606,"rel":607},"https:\u002F\u002Fspec.openapis.org\u002Foas\u002Fv3.1.0#operation-object",[421],"Operation Object","。",[454,611,614],{"className":456,"code":612,"filename":613,"language":459,"meta":5,"style":5},"import { defineRouteMeta, defineHandler } from \"nitro\";\n\ndefineRouteMeta({\n  openAPI: {\n    tags: [\"greeting\"],\n    description: \"返回问候消息\",\n    responses: {\n      200: { description: \"问候成功\" },\n    },\n  },\n});\n\nexport default defineHandler(() => {\n  return { message: \"你好，世界！\" };\n});\n","routes\u002Fapi\u002Fhello.ts",[412,615,616,629,633,639,644,655,665,670,685,691,696,701,706,725,740],{"__ignoreMap":5},[463,617,618,620,623,625,627],{"class":465,"line":466},[463,619,470],{"class":469},[463,621,622],{"class":473}," { defineRouteMeta, defineHandler } ",[463,624,477],{"class":469},[463,626,481],{"class":480},[463,628,484],{"class":473},[463,630,631],{"class":465,"line":487},[463,632,491],{"emptyLinePlaceholder":490},[463,634,635,637],{"class":465,"line":494},[463,636,414],{"class":503},[463,638,507],{"class":473},[463,640,641],{"class":465,"line":510},[463,642,643],{"class":473},"  openAPI: {\n",[463,645,646,649,652],{"class":465,"line":516},[463,647,648],{"class":473},"    tags: [",[463,650,651],{"class":480},"\"greeting\"",[463,653,654],{"class":473},"],\n",[463,656,657,660,663],{"class":465,"line":529},[463,658,659],{"class":473},"    description: ",[463,661,662],{"class":480},"\"返回问候消息\"",[463,664,526],{"class":473},[463,666,667],{"class":465,"line":535},[463,668,669],{"class":473},"    responses: {\n",[463,671,673,676,679,682],{"class":465,"line":672},8,[463,674,675],{"class":522},"      200",[463,677,678],{"class":473},": { description: ",[463,680,681],{"class":480},"\"问候成功\"",[463,683,684],{"class":473}," },\n",[463,686,688],{"class":465,"line":687},9,[463,689,690],{"class":473},"    },\n",[463,692,694],{"class":465,"line":693},10,[463,695,532],{"class":473},[463,697,699],{"class":465,"line":698},11,[463,700,538],{"class":473},[463,702,704],{"class":465,"line":703},12,[463,705,491],{"emptyLinePlaceholder":490},[463,707,709,711,713,716,719,722],{"class":465,"line":708},13,[463,710,497],{"class":469},[463,712,500],{"class":469},[463,714,715],{"class":503}," defineHandler",[463,717,718],{"class":473},"(() ",[463,720,721],{"class":469},"=>",[463,723,724],{"class":473}," {\n",[463,726,728,731,734,737],{"class":465,"line":727},14,[463,729,730],{"class":469},"  return",[463,732,733],{"class":473}," { message: ",[463,735,736],{"class":480},"\"你好，世界！\"",[463,738,739],{"class":473}," };\n",[463,741,743],{"class":465,"line":742},15,[463,744,538],{"class":473},[746,747,748],"note",{},[408,749,750,752],{},[412,751,414],{}," 是一个构建期宏。元数据会在构建过程中被静态提取，不会为处理器增加任何运行时开销。",[754,755,756],"h3",{"id":756},"参数",[408,758,759,760,763,764,767,768,771],{},"路由参数（如 ",[412,761,762],{},":id","、",[412,765,766],{},"[id]","）会自动转换为 OpenAPI 路径参数。你也可以在 ",[412,769,770],{},"parameters"," 数组中定义额外的查询参数或请求头参数：",[454,773,776],{"className":456,"code":774,"filename":775,"language":459,"meta":5,"style":5},"import { defineRouteMeta, defineHandler } from \"nitro\";\n\ndefineRouteMeta({\n  openAPI: {\n    tags: [\"users\"],\n    description: \"根据 ID 获取用户\",\n    parameters: [\n      {\n        in: \"query\",\n        name: \"include\",\n        description: \"要包含的关联资源列表，使用逗号分隔\",\n        schema: { type: \"string\" },\n      },\n    ],\n    responses: {\n      200: { description: \"已找到用户\" },\n      404: { description: \"未找到用户\" },\n    },\n  },\n});\n\nexport default defineHandler((event) => {\n  const { id } = event.context.params;\n  return { id, name: \"小明\" };\n});\n","routes\u002Fapi\u002Fusers\u002F[id].get.ts",[412,777,778,790,794,800,804,813,822,827,832,842,852,862,872,877,882,886,898,911,916,921,926,931,954,975,988],{"__ignoreMap":5},[463,779,780,782,784,786,788],{"class":465,"line":466},[463,781,470],{"class":469},[463,783,622],{"class":473},[463,785,477],{"class":469},[463,787,481],{"class":480},[463,789,484],{"class":473},[463,791,792],{"class":465,"line":487},[463,793,491],{"emptyLinePlaceholder":490},[463,795,796,798],{"class":465,"line":494},[463,797,414],{"class":503},[463,799,507],{"class":473},[463,801,802],{"class":465,"line":510},[463,803,643],{"class":473},[463,805,806,808,811],{"class":465,"line":516},[463,807,648],{"class":473},[463,809,810],{"class":480},"\"users\"",[463,812,654],{"class":473},[463,814,815,817,820],{"class":465,"line":529},[463,816,659],{"class":473},[463,818,819],{"class":480},"\"根据 ID 获取用户\"",[463,821,526],{"class":473},[463,823,824],{"class":465,"line":535},[463,825,826],{"class":473},"    parameters: [\n",[463,828,829],{"class":465,"line":672},[463,830,831],{"class":473},"      {\n",[463,833,834,837,840],{"class":465,"line":687},[463,835,836],{"class":473},"        in: ",[463,838,839],{"class":480},"\"query\"",[463,841,526],{"class":473},[463,843,844,847,850],{"class":465,"line":693},[463,845,846],{"class":473},"        name: ",[463,848,849],{"class":480},"\"include\"",[463,851,526],{"class":473},[463,853,854,857,860],{"class":465,"line":698},[463,855,856],{"class":473},"        description: ",[463,858,859],{"class":480},"\"要包含的关联资源列表，使用逗号分隔\"",[463,861,526],{"class":473},[463,863,864,867,870],{"class":465,"line":703},[463,865,866],{"class":473},"        schema: { type: ",[463,868,869],{"class":480},"\"string\"",[463,871,684],{"class":473},[463,873,874],{"class":465,"line":708},[463,875,876],{"class":473},"      },\n",[463,878,879],{"class":465,"line":727},[463,880,881],{"class":473},"    ],\n",[463,883,884],{"class":465,"line":742},[463,885,669],{"class":473},[463,887,889,891,893,896],{"class":465,"line":888},16,[463,890,675],{"class":522},[463,892,678],{"class":473},[463,894,895],{"class":480},"\"已找到用户\"",[463,897,684],{"class":473},[463,899,901,904,906,909],{"class":465,"line":900},17,[463,902,903],{"class":522},"      404",[463,905,678],{"class":473},[463,907,908],{"class":480},"\"未找到用户\"",[463,910,684],{"class":473},[463,912,914],{"class":465,"line":913},18,[463,915,690],{"class":473},[463,917,919],{"class":465,"line":918},19,[463,920,532],{"class":473},[463,922,924],{"class":465,"line":923},20,[463,925,538],{"class":473},[463,927,929],{"class":465,"line":928},21,[463,930,491],{"emptyLinePlaceholder":490},[463,932,934,936,938,940,943,947,950,952],{"class":465,"line":933},22,[463,935,497],{"class":469},[463,937,500],{"class":469},[463,939,715],{"class":503},[463,941,942],{"class":473},"((",[463,944,946],{"class":945},"sQHwn","event",[463,948,949],{"class":473},") ",[463,951,721],{"class":469},[463,953,724],{"class":473},[463,955,957,960,963,966,969,972],{"class":465,"line":956},23,[463,958,959],{"class":469},"  const",[463,961,962],{"class":473}," { ",[463,964,965],{"class":522},"id",[463,967,968],{"class":473}," } ",[463,970,971],{"class":469},"=",[463,973,974],{"class":473}," event.context.params;\n",[463,976,978,980,983,986],{"class":465,"line":977},24,[463,979,730],{"class":469},[463,981,982],{"class":473}," { id, name: ",[463,984,985],{"class":480},"\"小明\"",[463,987,739],{"class":473},[463,989,991],{"class":465,"line":990},25,[463,992,538],{"class":473},[408,994,995,996,998,999,1002],{},"在这个示例中，",[412,997,965],{}," 路径参数会根据路由模式自动推断，因此只需要声明额外的 ",[412,1000,1001],{},"include"," 查询参数。",[754,1004,1006],{"id":1005},"响应-schema","响应 Schema",[408,1008,1009,1010,1013],{},"使用标准的 OpenAPI ",[412,1011,1012],{},"responses"," 对象来定义响应的内容类型和 Schema：",[454,1015,1018],{"className":456,"code":1016,"filename":1017,"language":459,"meta":5,"style":5},"import { defineRouteMeta, defineHandler } from \"nitro\";\n\ndefineRouteMeta({\n  openAPI: {\n    description: \"返回当前服务器状态\",\n    responses: {\n      200: {\n        description: \"服务器状态\",\n        content: {\n          \"application\u002Fjson\": {\n            schema: {\n              type: \"object\",\n              properties: {\n                status: { type: \"string\", enum: [\"healthy\", \"degraded\"] },\n                uptime: { type: \"number\" },\n              },\n            },\n          },\n        },\n      },\n    },\n  },\n});\n\nexport default defineHandler(() => {\n  return { status: \"healthy\", uptime: process.uptime() };\n});\n","routes\u002Fapi\u002Fstatus.ts",[412,1019,1020,1032,1036,1042,1046,1055,1059,1066,1075,1080,1087,1092,1102,1107,1129,1139,1144,1149,1154,1159,1163,1167,1171,1175,1179,1193,1212],{"__ignoreMap":5},[463,1021,1022,1024,1026,1028,1030],{"class":465,"line":466},[463,1023,470],{"class":469},[463,1025,622],{"class":473},[463,1027,477],{"class":469},[463,1029,481],{"class":480},[463,1031,484],{"class":473},[463,1033,1034],{"class":465,"line":487},[463,1035,491],{"emptyLinePlaceholder":490},[463,1037,1038,1040],{"class":465,"line":494},[463,1039,414],{"class":503},[463,1041,507],{"class":473},[463,1043,1044],{"class":465,"line":510},[463,1045,643],{"class":473},[463,1047,1048,1050,1053],{"class":465,"line":516},[463,1049,659],{"class":473},[463,1051,1052],{"class":480},"\"返回当前服务器状态\"",[463,1054,526],{"class":473},[463,1056,1057],{"class":465,"line":529},[463,1058,669],{"class":473},[463,1060,1061,1063],{"class":465,"line":535},[463,1062,675],{"class":522},[463,1064,1065],{"class":473},": {\n",[463,1067,1068,1070,1073],{"class":465,"line":672},[463,1069,856],{"class":473},[463,1071,1072],{"class":480},"\"服务器状态\"",[463,1074,526],{"class":473},[463,1076,1077],{"class":465,"line":687},[463,1078,1079],{"class":473},"        content: {\n",[463,1081,1082,1085],{"class":465,"line":693},[463,1083,1084],{"class":480},"          \"application\u002Fjson\"",[463,1086,1065],{"class":473},[463,1088,1089],{"class":465,"line":698},[463,1090,1091],{"class":473},"            schema: {\n",[463,1093,1094,1097,1100],{"class":465,"line":703},[463,1095,1096],{"class":473},"              type: ",[463,1098,1099],{"class":480},"\"object\"",[463,1101,526],{"class":473},[463,1103,1104],{"class":465,"line":708},[463,1105,1106],{"class":473},"              properties: {\n",[463,1108,1109,1112,1114,1117,1120,1123,1126],{"class":465,"line":727},[463,1110,1111],{"class":473},"                status: { type: ",[463,1113,869],{"class":480},[463,1115,1116],{"class":473},", enum: [",[463,1118,1119],{"class":480},"\"healthy\"",[463,1121,1122],{"class":473},", ",[463,1124,1125],{"class":480},"\"degraded\"",[463,1127,1128],{"class":473},"] },\n",[463,1130,1131,1134,1137],{"class":465,"line":742},[463,1132,1133],{"class":473},"                uptime: { type: ",[463,1135,1136],{"class":480},"\"number\"",[463,1138,684],{"class":473},[463,1140,1141],{"class":465,"line":888},[463,1142,1143],{"class":473},"              },\n",[463,1145,1146],{"class":465,"line":900},[463,1147,1148],{"class":473},"            },\n",[463,1150,1151],{"class":465,"line":913},[463,1152,1153],{"class":473},"          },\n",[463,1155,1156],{"class":465,"line":918},[463,1157,1158],{"class":473},"        },\n",[463,1160,1161],{"class":465,"line":923},[463,1162,876],{"class":473},[463,1164,1165],{"class":465,"line":928},[463,1166,690],{"class":473},[463,1168,1169],{"class":465,"line":933},[463,1170,532],{"class":473},[463,1172,1173],{"class":465,"line":956},[463,1174,538],{"class":473},[463,1176,1177],{"class":465,"line":977},[463,1178,491],{"emptyLinePlaceholder":490},[463,1180,1181,1183,1185,1187,1189,1191],{"class":465,"line":990},[463,1182,497],{"class":469},[463,1184,500],{"class":469},[463,1186,715],{"class":503},[463,1188,718],{"class":473},[463,1190,721],{"class":469},[463,1192,724],{"class":473},[463,1194,1196,1198,1201,1203,1206,1209],{"class":465,"line":1195},26,[463,1197,730],{"class":469},[463,1199,1200],{"class":473}," { status: ",[463,1202,1119],{"class":480},[463,1204,1205],{"class":473},", uptime: process.",[463,1207,1208],{"class":503},"uptime",[463,1210,1211],{"class":473},"() };\n",[463,1213,1215],{"class":465,"line":1214},27,[463,1216,538],{"class":473},[754,1218,1219],{"id":1219},"全局组件",[408,1221,1222,1223,1226,1227,1230,1231,1234],{},"使用 ",[412,1224,1225],{},"$global"," 属性定义可复用的 Schema，它们会被提升到 OpenAPI 规范顶层的 ",[412,1228,1229],{},"components"," 区域。这样你就可以在多个路由之间通过 ",[412,1232,1233],{},"$ref"," 复用这些共享 Schema。",[454,1236,1239],{"className":456,"code":1237,"filename":1238,"language":459,"meta":5,"style":5},"import { defineRouteMeta, defineHandler } from \"nitro\";\n\ndefineRouteMeta({\n  openAPI: {\n    tags: [\"users\"],\n    description: \"列出所有用户\",\n    responses: {\n      200: {\n        description: \"用户列表\",\n        content: {\n          \"application\u002Fjson\": {\n            schema: {\n              type: \"array\",\n              items: { $ref: \"#\u002Fcomponents\u002Fschemas\u002FUser\" },\n            },\n          },\n        },\n      },\n    },\n    $global: {\n      components: {\n        schemas: {\n          User: {\n            type: \"object\",\n            properties: {\n              id: { type: \"string\" },\n              name: { type: \"string\" },\n              email: { type: \"string\", format: \"email\" },\n            },\n          },\n        },\n      },\n    },\n  },\n});\n\nexport default defineHandler(() => {\n  return [{ id: \"1\", name: \"小明\", email: \"xiaoming@example.com\" }];\n});\n","routes\u002Fapi\u002Fusers.get.ts",[412,1240,1241,1253,1257,1263,1267,1275,1284,1288,1294,1303,1307,1313,1317,1326,1336,1340,1344,1348,1352,1356,1361,1366,1371,1376,1385,1390,1399,1408,1424,1429,1434,1439,1444,1449,1454,1459,1464,1479,1504],{"__ignoreMap":5},[463,1242,1243,1245,1247,1249,1251],{"class":465,"line":466},[463,1244,470],{"class":469},[463,1246,622],{"class":473},[463,1248,477],{"class":469},[463,1250,481],{"class":480},[463,1252,484],{"class":473},[463,1254,1255],{"class":465,"line":487},[463,1256,491],{"emptyLinePlaceholder":490},[463,1258,1259,1261],{"class":465,"line":494},[463,1260,414],{"class":503},[463,1262,507],{"class":473},[463,1264,1265],{"class":465,"line":510},[463,1266,643],{"class":473},[463,1268,1269,1271,1273],{"class":465,"line":516},[463,1270,648],{"class":473},[463,1272,810],{"class":480},[463,1274,654],{"class":473},[463,1276,1277,1279,1282],{"class":465,"line":529},[463,1278,659],{"class":473},[463,1280,1281],{"class":480},"\"列出所有用户\"",[463,1283,526],{"class":473},[463,1285,1286],{"class":465,"line":535},[463,1287,669],{"class":473},[463,1289,1290,1292],{"class":465,"line":672},[463,1291,675],{"class":522},[463,1293,1065],{"class":473},[463,1295,1296,1298,1301],{"class":465,"line":687},[463,1297,856],{"class":473},[463,1299,1300],{"class":480},"\"用户列表\"",[463,1302,526],{"class":473},[463,1304,1305],{"class":465,"line":693},[463,1306,1079],{"class":473},[463,1308,1309,1311],{"class":465,"line":698},[463,1310,1084],{"class":480},[463,1312,1065],{"class":473},[463,1314,1315],{"class":465,"line":703},[463,1316,1091],{"class":473},[463,1318,1319,1321,1324],{"class":465,"line":708},[463,1320,1096],{"class":473},[463,1322,1323],{"class":480},"\"array\"",[463,1325,526],{"class":473},[463,1327,1328,1331,1334],{"class":465,"line":727},[463,1329,1330],{"class":473},"              items: { $ref: ",[463,1332,1333],{"class":480},"\"#\u002Fcomponents\u002Fschemas\u002FUser\"",[463,1335,684],{"class":473},[463,1337,1338],{"class":465,"line":742},[463,1339,1148],{"class":473},[463,1341,1342],{"class":465,"line":888},[463,1343,1153],{"class":473},[463,1345,1346],{"class":465,"line":900},[463,1347,1158],{"class":473},[463,1349,1350],{"class":465,"line":913},[463,1351,876],{"class":473},[463,1353,1354],{"class":465,"line":918},[463,1355,690],{"class":473},[463,1357,1358],{"class":465,"line":923},[463,1359,1360],{"class":473},"    $global: {\n",[463,1362,1363],{"class":465,"line":928},[463,1364,1365],{"class":473},"      components: {\n",[463,1367,1368],{"class":465,"line":933},[463,1369,1370],{"class":473},"        schemas: {\n",[463,1372,1373],{"class":465,"line":956},[463,1374,1375],{"class":473},"          User: {\n",[463,1377,1378,1381,1383],{"class":465,"line":977},[463,1379,1380],{"class":473},"            type: ",[463,1382,1099],{"class":480},[463,1384,526],{"class":473},[463,1386,1387],{"class":465,"line":990},[463,1388,1389],{"class":473},"            properties: {\n",[463,1391,1392,1395,1397],{"class":465,"line":1195},[463,1393,1394],{"class":473},"              id: { type: ",[463,1396,869],{"class":480},[463,1398,684],{"class":473},[463,1400,1401,1404,1406],{"class":465,"line":1214},[463,1402,1403],{"class":473},"              name: { type: ",[463,1405,869],{"class":480},[463,1407,684],{"class":473},[463,1409,1411,1414,1416,1419,1422],{"class":465,"line":1410},28,[463,1412,1413],{"class":473},"              email: { type: ",[463,1415,869],{"class":480},[463,1417,1418],{"class":473},", format: ",[463,1420,1421],{"class":480},"\"email\"",[463,1423,684],{"class":473},[463,1425,1427],{"class":465,"line":1426},29,[463,1428,1148],{"class":473},[463,1430,1432],{"class":465,"line":1431},30,[463,1433,1153],{"class":473},[463,1435,1437],{"class":465,"line":1436},31,[463,1438,1158],{"class":473},[463,1440,1442],{"class":465,"line":1441},32,[463,1443,876],{"class":473},[463,1445,1447],{"class":465,"line":1446},33,[463,1448,690],{"class":473},[463,1450,1452],{"class":465,"line":1451},34,[463,1453,532],{"class":473},[463,1455,1457],{"class":465,"line":1456},35,[463,1458,538],{"class":473},[463,1460,1462],{"class":465,"line":1461},36,[463,1463,491],{"emptyLinePlaceholder":490},[463,1465,1467,1469,1471,1473,1475,1477],{"class":465,"line":1466},37,[463,1468,497],{"class":469},[463,1470,500],{"class":469},[463,1472,715],{"class":503},[463,1474,718],{"class":473},[463,1476,721],{"class":469},[463,1478,724],{"class":473},[463,1480,1482,1484,1487,1490,1493,1495,1498,1501],{"class":465,"line":1481},38,[463,1483,730],{"class":469},[463,1485,1486],{"class":473}," [{ id: ",[463,1488,1489],{"class":480},"\"1\"",[463,1491,1492],{"class":473},", name: ",[463,1494,985],{"class":480},[463,1496,1497],{"class":473},", email: ",[463,1499,1500],{"class":480},"\"xiaoming@example.com\"",[463,1502,1503],{"class":473}," }];\n",[463,1505,1507],{"class":465,"line":1506},39,[463,1508,538],{"class":473},[408,1510,1511,1512,1515,1516,1519],{},"定义之后，",[412,1513,1514],{},"User"," Schema 就可以在任意其他路由中通过 ",[412,1517,1518],{},"{ $ref: \"#\u002Fcomponents\u002Fschemas\u002FUser\" }"," 引用，而无需重复声明。",[754,1521,1522],{"id":1522},"自动标签",[408,1524,1525],{},"路由会根据路径前缀自动分配标签：",[543,1527,1528,1538],{},[546,1529,1530],{},[549,1531,1532,1535],{},[552,1533,1534],{},"路径前缀",[552,1536,1537],{},"标签",[559,1539,1540,1550,1560],{},[549,1541,1542,1547],{},[564,1543,1544],{},[412,1545,1546],{},"\u002Fapi\u002F",[564,1548,1549],{},"API Routes",[549,1551,1552,1557],{},[564,1553,1554],{},[412,1555,1556],{},"\u002F_",[564,1558,1559],{},"Internal",[549,1561,1562,1565],{},[564,1563,1564],{},"其他",[564,1566,1567],{},"App Routes",[408,1569,1570,1571,1573,1574,1577],{},"你也可以在 ",[412,1572,602],{}," 元数据中显式指定 ",[412,1575,1576],{},"tags"," 来覆盖自动标签。",[443,1579,33],{"id":33},[408,1581,1582,1583,1585],{},"通过顶层 ",[412,1584,602],{}," 选项配置 OpenAPI 的行为：",[454,1587,1589],{"className":456,"code":1588,"filename":458,"language":459,"meta":5,"style":5},"import { defineConfig } from \"nitro\";\n\nexport default defineConfig({\n  experimental: {\n    openAPI: true,\n  },\n  openAPI: {\n    meta: {\n      title: \"My API\",\n      description: \"我的超棒 API\",\n      version: \"2.0.0\",\n    },\n  },\n});\n",[412,1590,1591,1603,1607,1617,1621,1629,1633,1637,1642,1652,1662,1672,1676,1680],{"__ignoreMap":5},[463,1592,1593,1595,1597,1599,1601],{"class":465,"line":466},[463,1594,470],{"class":469},[463,1596,474],{"class":473},[463,1598,477],{"class":469},[463,1600,481],{"class":480},[463,1602,484],{"class":473},[463,1604,1605],{"class":465,"line":487},[463,1606,491],{"emptyLinePlaceholder":490},[463,1608,1609,1611,1613,1615],{"class":465,"line":494},[463,1610,497],{"class":469},[463,1612,500],{"class":469},[463,1614,504],{"class":503},[463,1616,507],{"class":473},[463,1618,1619],{"class":465,"line":510},[463,1620,513],{"class":473},[463,1622,1623,1625,1627],{"class":465,"line":516},[463,1624,519],{"class":473},[463,1626,523],{"class":522},[463,1628,526],{"class":473},[463,1630,1631],{"class":465,"line":529},[463,1632,532],{"class":473},[463,1634,1635],{"class":465,"line":535},[463,1636,643],{"class":473},[463,1638,1639],{"class":465,"line":672},[463,1640,1641],{"class":473},"    meta: {\n",[463,1643,1644,1647,1650],{"class":465,"line":687},[463,1645,1646],{"class":473},"      title: ",[463,1648,1649],{"class":480},"\"My API\"",[463,1651,526],{"class":473},[463,1653,1654,1657,1660],{"class":465,"line":693},[463,1655,1656],{"class":473},"      description: ",[463,1658,1659],{"class":480},"\"我的超棒 API\"",[463,1661,526],{"class":473},[463,1663,1664,1667,1670],{"class":465,"line":698},[463,1665,1666],{"class":473},"      version: ",[463,1668,1669],{"class":480},"\"2.0.0\"",[463,1671,526],{"class":473},[463,1673,1674],{"class":465,"line":703},[463,1675,690],{"class":473},[463,1677,1678],{"class":465,"line":708},[463,1679,532],{"class":473},[463,1681,1682],{"class":465,"line":727},[463,1683,538],{"class":473},[754,1685,1687],{"id":1686},"meta",[412,1688,1686],{},[408,1690,1691,1692,1695],{},"设置 API 元数据，这些内容会出现在规范的 ",[412,1693,1694],{},"info"," 对象中：",[543,1697,1698,1710],{},[546,1699,1700],{},[549,1701,1702,1705,1708],{},[552,1703,1704],{},"属性",[552,1706,1707],{},"默认值",[552,1709,557],{},[559,1711,1712,1727,1740],{},[549,1713,1714,1719,1724],{},[564,1715,1716],{},[412,1717,1718],{},"title",[564,1720,1721],{},[412,1722,1723],{},"\"Nitro Server Routes\"",[564,1725,1726],{},"API 标题",[549,1728,1729,1734,1737],{},[564,1730,1731],{},[412,1732,1733],{},"description",[564,1735,1736],{},"—",[564,1738,1739],{},"API 描述",[549,1741,1742,1747,1752],{},[564,1743,1744],{},[412,1745,1746],{},"version",[564,1748,1749],{},[412,1750,1751],{},"\"1.0.0\"",[564,1753,1754],{},"API 版本",[754,1756,1758],{"id":1757},"route",[412,1759,1757],{},[1761,1762,1763],"ul",{},[1764,1765,1766,1767],"li",{},"默认值：",[412,1768,1769],{},"\"\u002F_openapi.json\"",[408,1771,1772],{},"覆盖 OpenAPI JSON 规范的服务路径：",[454,1774,1776],{"className":456,"code":1775,"filename":458,"language":459,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    route: \"\u002F_docs\u002Fopenapi.json\",\n  },\n});\n",[412,1777,1778,1788,1792,1802,1806],{"__ignoreMap":5},[463,1779,1780,1782,1784,1786],{"class":465,"line":466},[463,1781,497],{"class":469},[463,1783,500],{"class":469},[463,1785,504],{"class":503},[463,1787,507],{"class":473},[463,1789,1790],{"class":465,"line":487},[463,1791,643],{"class":473},[463,1793,1794,1797,1800],{"class":465,"line":494},[463,1795,1796],{"class":473},"    route: ",[463,1798,1799],{"class":480},"\"\u002F_docs\u002Fopenapi.json\"",[463,1801,526],{"class":473},[463,1803,1804],{"class":465,"line":510},[463,1805,532],{"class":473},[463,1807,1808],{"class":465,"line":516},[463,1809,538],{"class":473},[754,1811,1813],{"id":1812},"ui",[412,1814,1812],{},[408,1816,1817],{},"配置或禁用内置的 API 文档界面：",[454,1819,1821],{"className":456,"code":1820,"filename":458,"language":459,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    ui: {\n      scalar: {\n        route: \"\u002F_docs\u002Fscalar\",\n        theme: \"purple\",\n      },\n      swagger: {\n        route: \"\u002F_docs\u002Fswagger\",\n      },\n    },\n  },\n});\n",[412,1822,1823,1833,1837,1842,1847,1857,1867,1871,1876,1885,1889,1893,1897],{"__ignoreMap":5},[463,1824,1825,1827,1829,1831],{"class":465,"line":466},[463,1826,497],{"class":469},[463,1828,500],{"class":469},[463,1830,504],{"class":503},[463,1832,507],{"class":473},[463,1834,1835],{"class":465,"line":487},[463,1836,643],{"class":473},[463,1838,1839],{"class":465,"line":494},[463,1840,1841],{"class":473},"    ui: {\n",[463,1843,1844],{"class":465,"line":510},[463,1845,1846],{"class":473},"      scalar: {\n",[463,1848,1849,1852,1855],{"class":465,"line":516},[463,1850,1851],{"class":473},"        route: ",[463,1853,1854],{"class":480},"\"\u002F_docs\u002Fscalar\"",[463,1856,526],{"class":473},[463,1858,1859,1862,1865],{"class":465,"line":529},[463,1860,1861],{"class":473},"        theme: ",[463,1863,1864],{"class":480},"\"purple\"",[463,1866,526],{"class":473},[463,1868,1869],{"class":465,"line":535},[463,1870,876],{"class":473},[463,1872,1873],{"class":465,"line":672},[463,1874,1875],{"class":473},"      swagger: {\n",[463,1877,1878,1880,1883],{"class":465,"line":687},[463,1879,1851],{"class":473},[463,1881,1882],{"class":480},"\"\u002F_docs\u002Fswagger\"",[463,1884,526],{"class":473},[463,1886,1887],{"class":465,"line":693},[463,1888,876],{"class":473},[463,1890,1891],{"class":465,"line":698},[463,1892,690],{"class":473},[463,1894,1895],{"class":465,"line":703},[463,1896,532],{"class":473},[463,1898,1899],{"class":465,"line":708},[463,1900,538],{"class":473},[408,1902,1903,1904,1909],{},"将任一 UI 设置为 ",[412,1905,1906],{"className":456,"language":459,"style":5},[463,1907,1908],{"class":522},"false"," 即可禁用：",[454,1911,1913],{"className":456,"code":1912,"filename":458,"language":459,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    ui: {\n      swagger: false,\n    },\n  },\n});\n",[412,1914,1915,1925,1929,1933,1942,1946,1950],{"__ignoreMap":5},[463,1916,1917,1919,1921,1923],{"class":465,"line":466},[463,1918,497],{"class":469},[463,1920,500],{"class":469},[463,1922,504],{"class":503},[463,1924,507],{"class":473},[463,1926,1927],{"class":465,"line":487},[463,1928,643],{"class":473},[463,1930,1931],{"class":465,"line":494},[463,1932,1841],{"class":473},[463,1934,1935,1938,1940],{"class":465,"line":510},[463,1936,1937],{"class":473},"      swagger: ",[463,1939,1908],{"class":522},[463,1941,526],{"class":473},[463,1943,1944],{"class":465,"line":516},[463,1945,690],{"class":473},[463,1947,1948],{"class":465,"line":529},[463,1949,532],{"class":473},[463,1951,1952],{"class":465,"line":535},[463,1953,538],{"class":473},[1955,1956],"read-more",{"title":1957,"to":1958},"Scalar Configuration","https:\u002F\u002Fgithub.com\u002Fscalar\u002Fscalar",[443,1960,1961],{"id":1961},"生产环境",[408,1963,1964,1965,1968],{},"默认情况下，OpenAPI 端点只在开发环境中可用。若要在生产环境中启用，请设置 ",[412,1966,1967],{},"production"," 选项：",[454,1970,1972],{"className":456,"code":1971,"filename":458,"language":459,"meta":5,"style":5},"export default defineConfig({\n  openAPI: {\n    production: \"runtime\",\n  },\n});\n",[412,1973,1974,1984,1988,1998,2002],{"__ignoreMap":5},[463,1975,1976,1978,1980,1982],{"class":465,"line":466},[463,1977,497],{"class":469},[463,1979,500],{"class":469},[463,1981,504],{"class":503},[463,1983,507],{"class":473},[463,1985,1986],{"class":465,"line":487},[463,1987,643],{"class":473},[463,1989,1990,1993,1996],{"class":465,"line":494},[463,1991,1992],{"class":473},"    production: ",[463,1994,1995],{"class":480},"\"runtime\"",[463,1997,526],{"class":473},[463,1999,2000],{"class":465,"line":510},[463,2001,532],{"class":473},[463,2003,2004],{"class":465,"line":516},[463,2005,538],{"class":473},[543,2007,2008,2018],{},[546,2009,2010],{},[549,2011,2012,2015],{},[552,2013,2014],{},"值",[552,2016,2017],{},"行为",[559,2019,2020,2031,2042],{},[549,2021,2022,2028],{},[564,2023,2024],{},[412,2025,2026],{"className":456,"language":459,"style":5},[463,2027,1908],{"class":522},[564,2029,2030],{},"在生产环境中禁用（默认）",[549,2032,2033,2039],{},[564,2034,2035],{},[412,2036,2037],{"className":456,"language":459,"style":5},[463,2038,1995],{"class":480},[564,2040,2041],{},"在每次请求时运行时生成规范",[549,2043,2044,2051],{},[564,2045,2046],{},[412,2047,2048],{"className":456,"language":459,"style":5},[463,2049,2050],{"class":480},"\"prerender\"",[564,2052,2053],{},"在构建时生成规范，并作为静态文件提供",[408,2055,2056,2057,2061,2062,609],{},"如果规范在不同部署之间不会变化，建议使用 ",[412,2058,2059],{"className":456,"language":459,"style":5},[463,2060,2050],{"class":480}," 以获得最佳性能；如果你需要动态服务器信息或中间件访问能力，则使用 ",[412,2063,2064],{"className":456,"language":459,"style":5},[463,2065,1995],{"class":480},[2067,2068,2069],"warning",{},[408,2070,2071],{},"如果你在生产环境中启用了 OpenAPI，请务必使用合适的鉴权或访问控制来保护这些端点。",[2073,2074,2075],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}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 .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}",{"title":5,"searchDepth":487,"depth":487,"links":2077},[2078,2079,2085,2090],{"id":445,"depth":487,"text":446},{"id":593,"depth":487,"text":593,"children":2080},[2081,2082,2083,2084],{"id":756,"depth":494,"text":756},{"id":1005,"depth":494,"text":1006},{"id":1219,"depth":494,"text":1219},{"id":1522,"depth":494,"text":1522},{"id":33,"depth":487,"text":33,"children":2086},[2087,2088,2089],{"id":1686,"depth":494,"text":1686},{"id":1757,"depth":494,"text":1757},{"id":1812,"depth":494,"text":1812},{"id":1961,"depth":487,"text":1961},"Nitro 可以根据你的路由处理器自动生成 OpenAPI 规范，并提供交互式 API 文档。","md",{"icon":51},{"icon":51},{"title":48,"description":2091},"AK4lbQRV-exFdGXoVUE877u9QDtvVE0hpx_tAwi4hWI",[2098,2100],{"title":43,"path":44,"stem":45,"description":2099,"icon":46,"children":-1},"了解 Nitro 如何运行并为你的应用提供传入请求服务。",{"title":53,"path":54,"stem":55,"description":2101,"icon":56,"children":-1},"使用插件来扩展 Nitro 的运行时行为。",1777215897035]