[{"data":1,"prerenderedAt":1261},["ShallowReactive",2],{"navigation":3,"-guide-basics-routing":193,"-guide-basics-routing-surround":1256},[4,91,138,170,177],{"title":5,"path":6,"stem":7,"children":8,"icon":90},"Guide","/guide","1.guide/0.index",[9,12,53,69],{"title":10,"path":6,"stem":7,"icon":11},"Getting Started","pixel:play",{"title":5,"icon":13,"path":14,"stem":15,"children":16,"page":52},"ph:book-open-duotone","/guide/basics","1.guide/1.basics",[17,22,27,32,37,42,47],{"title":18,"path":19,"stem":20,"icon":21},"Request Lifecycle","/guide/basics/lifecycle","1.guide/1.basics/1.lifecycle","icon-park-outline:handle-round",{"title":23,"path":24,"stem":25,"icon":26},"Routing","/guide/basics/routing","1.guide/1.basics/2.routing","solar:routing-bold",{"title":28,"path":29,"stem":30,"icon":31},"Middleware","/guide/basics/middleware","1.guide/1.basics/3.middleware","mdi:middleware-outline",{"title":33,"path":34,"stem":35,"icon":36},"Event Handlers","/guide/basics/handler","1.guide/1.basics/4.handler","mdi:function",{"title":38,"path":39,"stem":40,"icon":41},"Sending Response","/guide/basics/response","1.guide/1.basics/5.response","tabler:json",{"title":43,"path":44,"stem":45,"icon":46},"Error Handling","/guide/basics/error","1.guide/1.basics/6.error","tabler:error-404",{"title":48,"path":49,"stem":50,"icon":51},"Nested Apps","/guide/basics/nested-apps","1.guide/1.basics/7.nested-apps","material-symbols-light:layers-outline",false,{"title":54,"icon":55,"path":56,"stem":57,"children":58,"page":52},"API","material-symbols-light:api-rounded","/guide/api","1.guide/900.api",[59,64],{"title":60,"path":61,"stem":62,"icon":63},"H3","/guide/api/h3","1.guide/900.api/1.h3","material-symbols:bolt-rounded",{"title":65,"path":66,"stem":67,"icon":68},"H3Event","/guide/api/h3event","1.guide/900.api/2.h3event","material-symbols:data-object-rounded",{"title":70,"icon":71,"path":72,"stem":73,"children":74,"page":52},"Advanced","hugeicons:more-01","/guide/advanced","1.guide/901.advanced",[75,80,85],{"title":76,"path":77,"stem":78,"icon":79},"Plugins","/guide/advanced/plugins","1.guide/901.advanced/1.plugins","clarity:plugin-line",{"title":81,"path":82,"stem":83,"icon":84},"WebSockets","/guide/advanced/websocket","1.guide/901.advanced/2.websocket","hugeicons:live-streaming-02",{"title":86,"path":87,"stem":88,"icon":89},"Nightly Builds","/guide/advanced/nightly","1.guide/901.advanced/9.nightly","game-icons:barn-owl","i-ph:book-open-duotone",{"title":92,"path":93,"stem":94,"children":95,"icon":97},"Utils","/utils","2.utils/0.index",[96,98,103,108,113,118,123,128,133],{"title":92,"path":93,"stem":94,"icon":97},"ph:function-bold",{"title":99,"path":100,"stem":101,"icon":102},"Request","/utils/request","2.utils/1.request","material-symbols-light:input",{"title":104,"path":105,"stem":106,"icon":107},"Response","/utils/response","2.utils/2.response","material-symbols-light:output",{"title":109,"path":110,"stem":111,"icon":112},"Cookie","/utils/cookie","2.utils/3.cookie","material-symbols:cookie-outline",{"title":114,"path":115,"stem":116,"icon":117},"Security","/utils/security","2.utils/4.security","wpf:key-security",{"title":119,"path":120,"stem":121,"icon":122},"Proxy","/utils/proxy","2.utils/5.proxy","arcticons:super-proxy",{"title":124,"path":125,"stem":126,"icon":127},"MCP","/utils/mcp","2.utils/6.mcp","material-symbols:swap-calls",{"title":129,"path":130,"stem":131,"icon":132},"More utils","/utils/more","2.utils/9.more","mingcute:plus-line",{"title":134,"path":135,"stem":136,"icon":137},"Community","/utils/community","2.utils/99.community","lets-icons:external",{"title":139,"path":140,"stem":141,"children":142,"icon":144},"Examples","/examples","4.examples/0.index",[143,145,150,154,158,162,166],{"title":139,"path":140,"stem":141,"icon":144},"ph:code",{"title":146,"path":147,"stem":148,"icon":149},"Cookies","/examples/handle-cookie","4.examples/handle-cookie","ph:arrow-right",{"title":151,"path":152,"stem":153,"icon":149},"HTTP QUERY Method","/examples/handle-query","4.examples/handle-query",{"title":155,"path":156,"stem":157,"icon":149},"Sessions","/examples/handle-session","4.examples/handle-session",{"title":159,"path":160,"stem":161,"icon":149},"Static Assets","/examples/serve-static-assets","4.examples/serve-static-assets",{"title":163,"path":164,"stem":165,"icon":149},"Stream Response","/examples/stream-response","4.examples/stream-response",{"title":167,"path":168,"stem":169,"icon":149},"Validate Data","/examples/validate-data","4.examples/validate-data",{"title":171,"path":172,"stem":173,"children":174,"icon":176},"Migration","/migration","5.migration/0.index",[175],{"title":171,"path":172,"stem":173,"icon":176},"icons8:up-round",{"title":178,"path":179,"stem":180,"children":181},"Blog","/blog","99.blog",[182,185,189],{"title":178,"path":179,"stem":183,"icon":184},"99.blog/index","i-lucide-file-text",{"title":186,"path":187,"stem":188,"icon":184},"H3 1.8 - Towards the Edge of the Web","/blog/v1.8","99.blog/1.v1.8",{"title":190,"path":191,"stem":192,"icon":184},"H3 v2 beta","/blog/v2-beta","99.blog/2.v2-beta",{"id":194,"title":23,"body":195,"description":1250,"extension":1251,"meta":1252,"navigation":1253,"path":24,"seo":1254,"stem":25,"__hash__":1255},"content/1.guide/1.basics/2.routing.md",{"type":196,"value":197,"toc":1242,"icon":26},"minimark",[198,203,238,251,266,354,357,431,439,486,490,508,543,549,613,623,631,656,670,762,776,779,816,872,894,898,905,969,980,1009,1013,1035,1081,1094,1102,1106,1109,1228,1238],[199,200,202],"h2",{"id":201},"adding-routes","Adding Routes",[204,205,206,207,211,212,215,216,223,224,230,231,237],"p",{},"You can register route ",[208,209,210],"a",{"href":34},"handlers"," to ",[208,213,214],{"href":61},"H3 instance"," using ",[208,217,219],{"href":218},"/guide/api/h3#h3on",[220,221,222],"code",{},"H3.on",", ",[208,225,227],{"href":226},"/guide/api/h3#h3method",[220,228,229],{},"H3.[method]",", or ",[208,232,234],{"href":233},"/guide/api/h3#h3all",[220,235,236],{},"H3.all",".",[239,240,241],"tip",{},[204,242,243,244,250],{},"\nRouter is powered by ",[208,245,249],{"href":246,"rel":247},"https://github.com/h3js/rou3",[248],"nofollow","🌳 Rou3",", an ultra-fast and tiny route matcher engine.",[204,252,253,257,258,261,262,265],{},[254,255,256],"strong",{},"Example:"," Register a route to match requests to the ",[220,259,260],{},"/hello"," endpoint with HTTP ",[254,263,264],{},"GET"," method.",[267,268,269,319],"ul",{},[270,271,272,273,277],"li",{},"Using ",[208,274,275],{"href":226},[220,276,229],{},[278,279,284],"pre",{"className":280,"code":281,"language":282,"meta":283,"style":283},"language-js shiki shiki-themes github-light github-dark github-dark","app.get(\"/hello\", () => \"Hello world!\");\n","js","",[220,285,286],{"__ignoreMap":283},[287,288,291,295,299,302,306,309,313,316],"span",{"class":289,"line":290},"line",1,[287,292,294],{"class":293},"slsVL","app.",[287,296,298],{"class":297},"shcOC","get",[287,300,301],{"class":293},"(",[287,303,305],{"class":304},"sfrk1","\"/hello\"",[287,307,308],{"class":293},", () ",[287,310,312],{"class":311},"so5gQ","=>",[287,314,315],{"class":304}," \"Hello world!\"",[287,317,318],{"class":293},");\n",[270,320,272,321,325],{},[208,322,323],{"href":218},[220,324,222],{},[278,326,328],{"className":280,"code":327,"language":282,"meta":283,"style":283},"app.on(\"GET\", \"/hello\", () => \"Hello world!\");\n",[220,329,330],{"__ignoreMap":283},[287,331,332,334,337,339,342,344,346,348,350,352],{"class":289,"line":290},[287,333,294],{"class":293},[287,335,336],{"class":297},"on",[287,338,301],{"class":293},[287,340,341],{"class":304},"\"GET\"",[287,343,223],{"class":293},[287,345,305],{"class":304},[287,347,308],{"class":293},[287,349,312],{"class":311},[287,351,315],{"class":304},[287,353,318],{"class":293},[204,355,356],{},"You can register multiple event handlers for the same route with different methods:",[278,358,360],{"className":280,"code":359,"language":282,"meta":283,"style":283},"app\n  .get(\"/hello\", () => \"GET Hello world!\")\n  .post(\"/hello\", () => \"POST Hello world!\")\n  .all(\"/hello\", () => \"Any other method!\");\n",[220,361,362,367,389,410],{"__ignoreMap":283},[287,363,364],{"class":289,"line":290},[287,365,366],{"class":293},"app\n",[287,368,370,373,375,377,379,381,383,386],{"class":289,"line":369},2,[287,371,372],{"class":293},"  .",[287,374,298],{"class":297},[287,376,301],{"class":293},[287,378,305],{"class":304},[287,380,308],{"class":293},[287,382,312],{"class":311},[287,384,385],{"class":304}," \"GET Hello world!\"",[287,387,388],{"class":293},")\n",[287,390,392,394,397,399,401,403,405,408],{"class":289,"line":391},3,[287,393,372],{"class":293},[287,395,396],{"class":297},"post",[287,398,301],{"class":293},[287,400,305],{"class":304},[287,402,308],{"class":293},[287,404,312],{"class":311},[287,406,407],{"class":304}," \"POST Hello world!\"",[287,409,388],{"class":293},[287,411,413,415,418,420,422,424,426,429],{"class":289,"line":412},4,[287,414,372],{"class":293},[287,416,417],{"class":297},"all",[287,419,301],{"class":293},[287,421,305],{"class":304},[287,423,308],{"class":293},[287,425,312],{"class":311},[287,427,428],{"class":304}," \"Any other method!\"",[287,430,318],{"class":293},[204,432,433,434,438],{},"You can also use ",[208,435,436],{"href":233},[220,437,236],{}," method to register a route accepting any HTTP method:",[278,440,442],{"className":280,"code":441,"language":282,"meta":283,"style":283},"app.all(\"/hello\", (event) => `This is a ${event.req.method} request!`);\n",[220,443,444],{"__ignoreMap":283},[287,445,446,448,450,452,454,457,461,464,466,469,471,473,476,478,481,484],{"class":289,"line":290},[287,447,294],{"class":293},[287,449,417],{"class":297},[287,451,301],{"class":293},[287,453,305],{"class":304},[287,455,456],{"class":293},", (",[287,458,460],{"class":459},"sQHwn","event",[287,462,463],{"class":293},") ",[287,465,312],{"class":311},[287,467,468],{"class":304}," `This is a ${",[287,470,460],{"class":293},[287,472,237],{"class":304},[287,474,475],{"class":293},"req",[287,477,237],{"class":304},[287,479,480],{"class":293},"method",[287,482,483],{"class":304},"} request!`",[287,485,318],{"class":293},[199,487,489],{"id":488},"head-requests","HEAD Requests",[204,491,492,493,223,498,501,502,504,505,507],{},"Following ",[208,494,497],{"href":495,"rel":496},"https://www.rfc-editor.org/rfc/rfc9110#name-head",[248],"RFC 9110",[220,499,500],{},"HEAD"," requests automatically match the corresponding ",[220,503,264],{}," route and run its handler, but the response body is omitted (only the headers and status are sent). You don't need to register a separate ",[220,506,500],{}," handler:",[278,509,511],{"className":280,"code":510,"language":282,"meta":283,"style":283},"app.get(\"/hello\", () => \"Hello world!\");\n\n// HEAD /hello → 200 with the same headers as GET, but an empty body\n",[220,512,513,531,537],{"__ignoreMap":283},[287,514,515,517,519,521,523,525,527,529],{"class":289,"line":290},[287,516,294],{"class":293},[287,518,298],{"class":297},[287,520,301],{"class":293},[287,522,305],{"class":304},[287,524,308],{"class":293},[287,526,312],{"class":311},[287,528,315],{"class":304},[287,530,318],{"class":293},[287,532,533],{"class":289,"line":369},[287,534,536],{"emptyLinePlaceholder":535},true,"\n",[287,538,539],{"class":289,"line":391},[287,540,542],{"class":541},"sCsY4","// HEAD /hello → 200 with the same headers as GET, but an empty body\n",[204,544,545,546,548],{},"Register an explicit ",[220,547,500],{}," handler when you want to override this — for example, to skip computing the body:",[278,550,552],{"className":280,"code":551,"language":282,"meta":283,"style":283},"app.head(\"/hello\", (event) => {\n  event.res.headers.set(\"content-length\", \"12\");\n  return null;\n});\n",[220,553,554,576,596,608],{"__ignoreMap":283},[287,555,556,558,561,563,565,567,569,571,573],{"class":289,"line":290},[287,557,294],{"class":293},[287,559,560],{"class":297},"head",[287,562,301],{"class":293},[287,564,305],{"class":304},[287,566,456],{"class":293},[287,568,460],{"class":459},[287,570,463],{"class":293},[287,572,312],{"class":311},[287,574,575],{"class":293}," {\n",[287,577,578,581,584,586,589,591,594],{"class":289,"line":369},[287,579,580],{"class":293},"  event.res.headers.",[287,582,583],{"class":297},"set",[287,585,301],{"class":293},[287,587,588],{"class":304},"\"content-length\"",[287,590,223],{"class":293},[287,592,593],{"class":304},"\"12\"",[287,595,318],{"class":293},[287,597,598,601,605],{"class":289,"line":391},[287,599,600],{"class":311},"  return",[287,602,604],{"class":603},"suiK_"," null",[287,606,607],{"class":293},";\n",[287,609,610],{"class":289,"line":412},[287,611,612],{"class":293},"});\n",[204,614,615,616,619,620,622],{},"An explicit ",[220,617,618],{},"head()"," route always takes precedence over the automatic ",[220,621,264],{}," fallback.",[199,624,626,627,630],{"id":625},"http-query-method","HTTP ",[220,628,629],{},"QUERY"," Method",[204,632,633,634,641,642,644,645,647,648,651,652,655],{},"H3 supports the ",[208,635,626,638,640],{"href":636,"rel":637},"https://www.rfc-editor.org/rfc/rfc10008",[248],[220,639,629],{}," method (RFC 10008)"," as a first-class method. ",[220,643,629],{}," is like ",[220,646,264],{}," — ",[254,649,650],{},"safe, idempotent, and cacheable"," — but carries a request body (with a ",[220,653,654],{},"Content-Type","), closing the long-standing \"GET with a body\" gap. It's ideal for complex read operations where filters don't fit in a URL.",[204,657,658,659,661,662,665,666,669],{},"Register a ",[220,660,629],{}," handler with ",[220,663,664],{},"app.query()"," (or ",[220,667,668],{},"app.on(\"QUERY\", …)",") and read the request body as usual:",[278,671,673],{"className":280,"code":672,"language":282,"meta":283,"style":283},"import { readBody } from \"h3\";\n\napp.query(\"/search\", async (event) => {\n  const criteria = await readBody(event); // read the query body\n  return runSearch(criteria);\n});\n",[220,674,675,691,695,723,746,757],{"__ignoreMap":283},[287,676,677,680,683,686,689],{"class":289,"line":290},[287,678,679],{"class":311},"import",[287,681,682],{"class":293}," { readBody } ",[287,684,685],{"class":311},"from",[287,687,688],{"class":304}," \"h3\"",[287,690,607],{"class":293},[287,692,693],{"class":289,"line":369},[287,694,536],{"emptyLinePlaceholder":535},[287,696,697,699,702,704,707,709,712,715,717,719,721],{"class":289,"line":391},[287,698,294],{"class":293},[287,700,701],{"class":297},"query",[287,703,301],{"class":293},[287,705,706],{"class":304},"\"/search\"",[287,708,223],{"class":293},[287,710,711],{"class":311},"async",[287,713,714],{"class":293}," (",[287,716,460],{"class":459},[287,718,463],{"class":293},[287,720,312],{"class":311},[287,722,575],{"class":293},[287,724,725,728,731,734,737,740,743],{"class":289,"line":412},[287,726,727],{"class":311},"  const",[287,729,730],{"class":603}," criteria",[287,732,733],{"class":311}," =",[287,735,736],{"class":311}," await",[287,738,739],{"class":297}," readBody",[287,741,742],{"class":293},"(event); ",[287,744,745],{"class":541},"// read the query body\n",[287,747,749,751,754],{"class":289,"line":748},5,[287,750,600],{"class":311},[287,752,753],{"class":297}," runSearch",[287,755,756],{"class":293},"(criteria);\n",[287,758,760],{"class":289,"line":759},6,[287,761,612],{"class":293},[204,763,764,765,767,768,772,773,237],{},"Because ",[220,766,629],{}," carries an attacker-controllable body, ",[208,769,771],{"href":770},"/utils/request#assertbodysizeevent-limit","body-size limits"," apply just like ",[220,774,775],{},"POST",[204,777,778],{},"Two utilities help implement the RFC:",[267,780,781,803],{},[270,782,783,789,790,714,792,795,796,795,799,802],{},[208,784,786],{"href":785},"/utils/request#requirecontenttypeevent-acceptedtypes",[220,787,788],{},"requireContentType(event, acceptedTypes)"," — assert the request ",[220,791,654],{},[220,793,794],{},"400","/",[220,797,798],{},"415",[220,800,801],{},"422",").",[270,804,805,811,812,815],{},[208,806,808],{"href":807},"/utils/request#appendacceptqueryevent-mediatypes",[220,809,810],{},"appendAcceptQuery(event, mediaTypes)"," — advertise accepted query formats via the ",[220,813,814],{},"Accept-Query"," response header.",[817,818,819],"note",{},[204,820,821,823,824,826,827,714,831,834,835,838,839,844,845,848,849,223,851,853,854,857,858,861,862,868,869,237],{},[220,822,629],{}," is treated like ",[220,825,264],{}," for ",[208,828,830],{"href":829},"/utils/request#handlecacheheadersevent-opts","conditional caching",[220,832,833],{},"304"," responses via ",[220,836,837],{},"handleCacheHeaders","), and ",[208,840,841],{"href":120},[220,842,843],{},"proxy"," forwards it ",[254,846,847],{},"with"," its body. Unlike ",[220,850,264],{},[220,852,629],{}," is ",[254,855,856],{},"not"," CORS-safelisted, so browsers send a preflight — if you pass an explicit ",[220,859,860],{},"methods"," allowlist to ",[208,863,865],{"href":864},"/utils/security#handlecorsevent-options",[220,866,867],{},"handleCors",", include ",[220,870,871],{},"\"QUERY\"",[873,874,875],"read-more",{"to":152},[204,876,877,878,883,884,887,888,890,891,893],{},"See the ",[208,879,626,880,882],{"href":152},[220,881,629],{}," method example"," for a runnable ",[220,885,886],{},"/books"," resource that validates the ",[220,889,654],{}," and advertises a cacheable ",[220,892,264],{}," alternative.",[199,895,897],{"id":896},"dynamic-routes","Dynamic Routes",[204,899,900,901,904],{},"You can define dynamic route parameters using ",[220,902,903],{},":"," prefix:",[278,906,908],{"className":280,"code":907,"language":282,"meta":283,"style":283},"// [GET] /hello/Bob => \"Hello, Bob!\"\napp.get(\"/hello/:name\", (event) => {\n  return `Hello, ${event.context.params.name}!`;\n});\n",[220,909,910,915,936,965],{"__ignoreMap":283},[287,911,912],{"class":289,"line":290},[287,913,914],{"class":541},"// [GET] /hello/Bob => \"Hello, Bob!\"\n",[287,916,917,919,921,923,926,928,930,932,934],{"class":289,"line":369},[287,918,294],{"class":293},[287,920,298],{"class":297},[287,922,301],{"class":293},[287,924,925],{"class":304},"\"/hello/:name\"",[287,927,456],{"class":293},[287,929,460],{"class":459},[287,931,463],{"class":293},[287,933,312],{"class":311},[287,935,575],{"class":293},[287,937,938,940,943,945,947,950,952,955,957,960,963],{"class":289,"line":391},[287,939,600],{"class":311},[287,941,942],{"class":304}," `Hello, ${",[287,944,460],{"class":293},[287,946,237],{"class":304},[287,948,949],{"class":293},"context",[287,951,237],{"class":304},[287,953,954],{"class":293},"params",[287,956,237],{"class":304},[287,958,959],{"class":293},"name",[287,961,962],{"class":304},"}!`",[287,964,607],{"class":293},[287,966,967],{"class":289,"line":412},[287,968,612],{"class":293},[204,970,971,972,975,976,979],{},"Instead of named parameters, you can use ",[220,973,974],{},"*"," for unnamed ",[254,977,978],{},"optional"," parameters:",[278,981,983],{"className":280,"code":982,"language":282,"meta":283,"style":283},"app.get(\"/hello/*\", (event) => `Hello!`);\n",[220,984,985],{"__ignoreMap":283},[287,986,987,989,991,993,996,998,1000,1002,1004,1007],{"class":289,"line":290},[287,988,294],{"class":293},[287,990,298],{"class":297},[287,992,301],{"class":293},[287,994,995],{"class":304},"\"/hello/*\"",[287,997,456],{"class":293},[287,999,460],{"class":459},[287,1001,463],{"class":293},[287,1003,312],{"class":311},[287,1005,1006],{"class":304}," `Hello!`",[287,1008,318],{"class":293},[199,1010,1012],{"id":1011},"wildcard-routes","Wildcard Routes",[204,1014,1015,1016,1019,1020,1023,1024,1027,1028,1031,1032,904],{},"Adding ",[220,1017,1018],{},"/hello/:name"," route will match ",[220,1021,1022],{},"/hello/world"," or ",[220,1025,1026],{},"/hello/123",". But it will not match ",[220,1029,1030],{},"/hello/foo/bar",".\nWhen you need to match multiple levels of sub routes, you can use ",[220,1033,1034],{},"**",[278,1036,1038],{"className":280,"code":1037,"language":282,"meta":283,"style":283},"app.get(\"/hello/**\", (event) => `Hello ${event.context.params._}!`);\n",[220,1039,1040],{"__ignoreMap":283},[287,1041,1042,1044,1046,1048,1051,1053,1055,1057,1059,1062,1064,1066,1068,1070,1072,1074,1077,1079],{"class":289,"line":290},[287,1043,294],{"class":293},[287,1045,298],{"class":297},[287,1047,301],{"class":293},[287,1049,1050],{"class":304},"\"/hello/**\"",[287,1052,456],{"class":293},[287,1054,460],{"class":459},[287,1056,463],{"class":293},[287,1058,312],{"class":311},[287,1060,1061],{"class":304}," `Hello ${",[287,1063,460],{"class":293},[287,1065,237],{"class":304},[287,1067,949],{"class":293},[287,1069,237],{"class":304},[287,1071,954],{"class":293},[287,1073,237],{"class":304},[287,1075,1076],{"class":293},"_",[287,1078,962],{"class":304},[287,1080,318],{"class":293},[204,1082,1083,1084,223,1086,223,1088,223,1090,1093],{},"This will match ",[220,1085,260],{},[220,1087,1022],{},[220,1089,1026],{},[220,1091,1092],{},"/hello/world/123",", etc.",[817,1095,1096],{},[204,1097,1098,1099,1101],{},"\nParam ",[220,1100,1076],{}," will store the full wildcard content as a single string.",[199,1103,1105],{"id":1104},"route-meta","Route Meta",[204,1107,1108],{},"You can define optional route meta when registering them, accessible from any middleware.",[278,1110,1112],{"className":280,"code":1111,"language":282,"meta":283,"style":283},"import { H3 } from \"h3\";\n\nconst app = new H3();\n\napp.use((event) => {\n  console.log(event.context.matchedRoute?.meta); // { auth: true }\n});\n\napp.get(\"/\", (event) => \"Hi!\", { meta: { auth: true } });\n",[220,1113,1114,1127,1131,1150,1154,1172,1186,1191,1196],{"__ignoreMap":283},[287,1115,1116,1118,1121,1123,1125],{"class":289,"line":290},[287,1117,679],{"class":311},[287,1119,1120],{"class":293}," { H3 } ",[287,1122,685],{"class":311},[287,1124,688],{"class":304},[287,1126,607],{"class":293},[287,1128,1129],{"class":289,"line":369},[287,1130,536],{"emptyLinePlaceholder":535},[287,1132,1133,1136,1139,1141,1144,1147],{"class":289,"line":391},[287,1134,1135],{"class":311},"const",[287,1137,1138],{"class":603}," app",[287,1140,733],{"class":311},[287,1142,1143],{"class":311}," new",[287,1145,1146],{"class":297}," H3",[287,1148,1149],{"class":293},"();\n",[287,1151,1152],{"class":289,"line":412},[287,1153,536],{"emptyLinePlaceholder":535},[287,1155,1156,1158,1161,1164,1166,1168,1170],{"class":289,"line":748},[287,1157,294],{"class":293},[287,1159,1160],{"class":297},"use",[287,1162,1163],{"class":293},"((",[287,1165,460],{"class":459},[287,1167,463],{"class":293},[287,1169,312],{"class":311},[287,1171,575],{"class":293},[287,1173,1174,1177,1180,1183],{"class":289,"line":759},[287,1175,1176],{"class":293},"  console.",[287,1178,1179],{"class":297},"log",[287,1181,1182],{"class":293},"(event.context.matchedRoute?.meta); ",[287,1184,1185],{"class":541},"// { auth: true }\n",[287,1187,1189],{"class":289,"line":1188},7,[287,1190,612],{"class":293},[287,1192,1194],{"class":289,"line":1193},8,[287,1195,536],{"emptyLinePlaceholder":535},[287,1197,1199,1201,1203,1205,1208,1210,1212,1214,1216,1219,1222,1225],{"class":289,"line":1198},9,[287,1200,294],{"class":293},[287,1202,298],{"class":297},[287,1204,301],{"class":293},[287,1206,1207],{"class":304},"\"/\"",[287,1209,456],{"class":293},[287,1211,460],{"class":459},[287,1213,463],{"class":293},[287,1215,312],{"class":311},[287,1217,1218],{"class":304}," \"Hi!\"",[287,1220,1221],{"class":293},", { meta: { auth: ",[287,1223,1224],{"class":603},"true",[287,1226,1227],{"class":293}," } });\n",[873,1229,1231],{"to":1230},"/guide/basics/handler#meta",[204,1232,1233,1234,1237],{},"It is also possible to add route meta when defining them using ",[220,1235,1236],{},"defineHandler"," object syntax.",[1239,1240,1241],"style",{},"html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}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}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}",{"title":283,"searchDepth":369,"depth":369,"links":1243},[1244,1245,1246,1247,1248,1249],{"id":201,"depth":369,"text":202},{"id":488,"depth":369,"text":489},{"id":625,"depth":369,"text":151},{"id":896,"depth":369,"text":897},{"id":1011,"depth":369,"text":1012},{"id":1104,"depth":369,"text":1105},"Each request is matched to one (most specific) route handler.","md",{"icon":26},{"icon":26},{"title":23,"description":1250},"dbSs8VeHG3LIyD1izrXWXZ5iJvT4fKt8W5KPrjhIk5A",[1257,1259],{"title":18,"path":19,"stem":20,"description":1258,"icon":21,"children":-1},"H3 dispatches incoming web requests to final web responses.",{"title":28,"path":29,"stem":30,"description":1260,"icon":31,"children":-1},"Intercept request, response and errors using H3 middleware.",1783690727816]