[{"data":1,"prerenderedAt":1348},["ShallowReactive",2],{"navigation":3,"-guide-basics-handler":193,"-guide-basics-handler-surround":1343},[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":33,"body":195,"description":1337,"extension":1338,"meta":1339,"navigation":1340,"path":34,"seo":1341,"stem":35,"__hash__":1342},"content/1.guide/1.basics/4.handler.md",{"type":196,"value":197,"toc":1324,"icon":36},"minimark",[198,207,329,344,347,374,379,383,389,460,464,466,469,472,607,613,620,629,727,731,738,741,825,828,831,978,982,985,989,1011,1169,1173,1184,1190,1320],[199,200,201,202,206],"p",{},"You can define typed event handlers using ",[203,204,205],"code",{},"defineHandler",".",[208,209,214],"pre",{"className":210,"code":211,"language":212,"meta":213,"style":213},"language-js shiki shiki-themes github-light github-dark github-dark","import { H3, defineHandler } from \"h3\";\n\nconst app = new H3();\n\nconst handler = defineHandler((event) => \"Response\");\n\napp.get(\"/\", handler);\n","js","",[203,215,216,239,246,269,274,306,311],{"__ignoreMap":213},[217,218,221,225,229,232,236],"span",{"class":219,"line":220},"line",1,[217,222,224],{"class":223},"so5gQ","import",[217,226,228],{"class":227},"slsVL"," { H3, defineHandler } ",[217,230,231],{"class":223},"from",[217,233,235],{"class":234},"sfrk1"," \"h3\"",[217,237,238],{"class":227},";\n",[217,240,242],{"class":219,"line":241},2,[217,243,245],{"emptyLinePlaceholder":244},true,"\n",[217,247,249,252,256,259,262,266],{"class":219,"line":248},3,[217,250,251],{"class":223},"const",[217,253,255],{"class":254},"suiK_"," app",[217,257,258],{"class":223}," =",[217,260,261],{"class":223}," new",[217,263,265],{"class":264},"shcOC"," H3",[217,267,268],{"class":227},"();\n",[217,270,272],{"class":219,"line":271},4,[217,273,245],{"emptyLinePlaceholder":244},[217,275,277,279,282,284,287,290,294,297,300,303],{"class":219,"line":276},5,[217,278,251],{"class":223},[217,280,281],{"class":254}," handler",[217,283,258],{"class":223},[217,285,286],{"class":264}," defineHandler",[217,288,289],{"class":227},"((",[217,291,293],{"class":292},"sQHwn","event",[217,295,296],{"class":227},") ",[217,298,299],{"class":223},"=>",[217,301,302],{"class":234}," \"Response\"",[217,304,305],{"class":227},");\n",[217,307,309],{"class":219,"line":308},6,[217,310,245],{"emptyLinePlaceholder":244},[217,312,314,317,320,323,326],{"class":219,"line":313},7,[217,315,316],{"class":227},"app.",[217,318,319],{"class":264},"get",[217,321,322],{"class":227},"(",[217,324,325],{"class":234},"\"/\"",[217,327,328],{"class":227},", handler);\n",[330,331,332],"note",{},[199,333,334,335,337,338,343],{},"\nUsing ",[203,336,205],{}," is optional.\nYou can instead, simply use a function that accepts an ",[339,340,341],"a",{"href":66},[203,342,65],{}," and returns a response.",[199,345,346],{},"The callback function can be sync or async:",[208,348,350],{"className":210,"code":349,"language":212,"meta":213,"style":213},"defineHandler(async (event) => \"Response\");\n",[203,351,352],{"__ignoreMap":213},[217,353,354,356,358,361,364,366,368,370,372],{"class":219,"line":220},[217,355,205],{"class":264},[217,357,322],{"class":227},[217,359,360],{"class":223},"async",[217,362,363],{"class":227}," (",[217,365,293],{"class":292},[217,367,296],{"class":227},[217,369,299],{"class":223},[217,371,302],{"class":234},[217,373,305],{"class":227},[375,376,378],"h2",{"id":377},"object-syntax","Object Syntax",[380,381,382],"h3",{"id":382},"middleware",[199,384,385,386,388],{},"You can optionally register some ",[339,387,382],{"href":29}," to run with event handler to intercept request, response or errors.",[208,390,392],{"className":210,"code":391,"language":212,"meta":213,"style":213},"import { basicAuth } from \"h3\";\n\ndefineHandler({\n  middleware: [basicAuth({ password: \"test\" })],\n  handler: (event) => \"Hi!\",\n});\n",[203,393,394,407,411,418,435,455],{"__ignoreMap":213},[217,395,396,398,401,403,405],{"class":219,"line":220},[217,397,224],{"class":223},[217,399,400],{"class":227}," { basicAuth } ",[217,402,231],{"class":223},[217,404,235],{"class":234},[217,406,238],{"class":227},[217,408,409],{"class":219,"line":241},[217,410,245],{"emptyLinePlaceholder":244},[217,412,413,415],{"class":219,"line":248},[217,414,205],{"class":264},[217,416,417],{"class":227},"({\n",[217,419,420,423,426,429,432],{"class":219,"line":271},[217,421,422],{"class":227},"  middleware: [",[217,424,425],{"class":264},"basicAuth",[217,427,428],{"class":227},"({ password: ",[217,430,431],{"class":234},"\"test\"",[217,433,434],{"class":227}," })],\n",[217,436,437,440,443,445,447,449,452],{"class":219,"line":276},[217,438,439],{"class":264},"  handler",[217,441,442],{"class":227},": (",[217,444,293],{"class":292},[217,446,296],{"class":227},[217,448,299],{"class":223},[217,450,451],{"class":234}," \"Hi!\"",[217,453,454],{"class":227},",\n",[217,456,457],{"class":219,"line":308},[217,458,459],{"class":227},"});\n",[461,462],"read-more",{"to":39,"title":463},"Response Handling",[461,465],{"to":66},[380,467,468],{"id":468},"meta",[199,470,471],{},"You can define optional route meta attached to handlers, and access them from any other middleware.",[208,473,475],{"className":210,"code":474,"language":212,"meta":213,"style":213},"import { H3, defineHandler } from \"h3\";\n\nconst app = new H3();\n\napp.use((event) => {\n  console.log(event.context.matchedRoute?.meta); // { tag: \"admin\" }\n});\n\napp.get(\"/admin/**\", defineHandler({\n  meta: { tag: \"admin\" },\n  handler: (event) => \"Hi!\",\n})\n",[203,476,477,489,493,507,511,529,544,548,553,572,584,601],{"__ignoreMap":213},[217,478,479,481,483,485,487],{"class":219,"line":220},[217,480,224],{"class":223},[217,482,228],{"class":227},[217,484,231],{"class":223},[217,486,235],{"class":234},[217,488,238],{"class":227},[217,490,491],{"class":219,"line":241},[217,492,245],{"emptyLinePlaceholder":244},[217,494,495,497,499,501,503,505],{"class":219,"line":248},[217,496,251],{"class":223},[217,498,255],{"class":254},[217,500,258],{"class":223},[217,502,261],{"class":223},[217,504,265],{"class":264},[217,506,268],{"class":227},[217,508,509],{"class":219,"line":271},[217,510,245],{"emptyLinePlaceholder":244},[217,512,513,515,518,520,522,524,526],{"class":219,"line":276},[217,514,316],{"class":227},[217,516,517],{"class":264},"use",[217,519,289],{"class":227},[217,521,293],{"class":292},[217,523,296],{"class":227},[217,525,299],{"class":223},[217,527,528],{"class":227}," {\n",[217,530,531,534,537,540],{"class":219,"line":308},[217,532,533],{"class":227},"  console.",[217,535,536],{"class":264},"log",[217,538,539],{"class":227},"(event.context.matchedRoute?.meta); ",[217,541,543],{"class":542},"sCsY4","// { tag: \"admin\" }\n",[217,545,546],{"class":219,"line":313},[217,547,459],{"class":227},[217,549,551],{"class":219,"line":550},8,[217,552,245],{"emptyLinePlaceholder":244},[217,554,556,558,560,562,565,568,570],{"class":219,"line":555},9,[217,557,316],{"class":227},[217,559,319],{"class":264},[217,561,322],{"class":227},[217,563,564],{"class":234},"\"/admin/**\"",[217,566,567],{"class":227},", ",[217,569,205],{"class":264},[217,571,417],{"class":227},[217,573,575,578,581],{"class":219,"line":574},10,[217,576,577],{"class":227},"  meta: { tag: ",[217,579,580],{"class":234},"\"admin\"",[217,582,583],{"class":227}," },\n",[217,585,587,589,591,593,595,597,599],{"class":219,"line":586},11,[217,588,439],{"class":264},[217,590,442],{"class":227},[217,592,293],{"class":292},[217,594,296],{"class":227},[217,596,299],{"class":223},[217,598,451],{"class":234},[217,600,454],{"class":227},[217,602,604],{"class":219,"line":603},12,[217,605,606],{"class":227},"})\n",[461,608,610],{"to":609},"/guide/basics/routing#route-meta",[199,611,612],{},"It is also possible to add route meta when registering them to app instance.",[375,614,616,617],{"id":615},"handler-fetch","Handler ",[203,618,619],{},".fetch",[199,621,622,623,625,626,628],{},"Event handlers defined with ",[203,624,205],{},", can act as a web handler without even using ",[339,627,60],{"href":61}," class.",[208,630,632],{"className":210,"code":631,"language":212,"meta":213,"style":213},"const handler = defineHandler(async (event) => `Request: ${event.req.url}`);\n\nconst response = await handler.fetch(\"http://localhost/\");\nconsole.log(response, await response.text());\n",[203,633,634,676,680,705],{"__ignoreMap":213},[217,635,636,638,640,642,644,646,648,650,652,654,656,659,661,663,666,668,671,674],{"class":219,"line":220},[217,637,251],{"class":223},[217,639,281],{"class":254},[217,641,258],{"class":223},[217,643,286],{"class":264},[217,645,322],{"class":227},[217,647,360],{"class":223},[217,649,363],{"class":227},[217,651,293],{"class":292},[217,653,296],{"class":227},[217,655,299],{"class":223},[217,657,658],{"class":234}," `Request: ${",[217,660,293],{"class":227},[217,662,206],{"class":234},[217,664,665],{"class":227},"req",[217,667,206],{"class":234},[217,669,670],{"class":227},"url",[217,672,673],{"class":234},"}`",[217,675,305],{"class":227},[217,677,678],{"class":219,"line":241},[217,679,245],{"emptyLinePlaceholder":244},[217,681,682,684,687,689,692,695,698,700,703],{"class":219,"line":248},[217,683,251],{"class":223},[217,685,686],{"class":254}," response",[217,688,258],{"class":223},[217,690,691],{"class":223}," await",[217,693,694],{"class":227}," handler.",[217,696,697],{"class":264},"fetch",[217,699,322],{"class":227},[217,701,702],{"class":234},"\"http://localhost/\"",[217,704,305],{"class":227},[217,706,707,710,712,715,718,721,724],{"class":219,"line":271},[217,708,709],{"class":227},"console.",[217,711,536],{"class":264},[217,713,714],{"class":227},"(response, ",[217,716,717],{"class":223},"await",[217,719,720],{"class":227}," response.",[217,722,723],{"class":264},"text",[217,725,726],{"class":227},"());\n",[375,728,730],{"id":729},"lazy-handlers","Lazy Handlers",[199,732,733,734,737],{},"You can define lazy event handlers using ",[203,735,736],{},"defineLazyEventHandler",". This allow you to define some one-time logic that will be executed only once when the first request matching the route is received.",[199,739,740],{},"A lazy event handler must return an event handler.",[208,742,744],{"className":210,"code":743,"language":212,"meta":213,"style":213},"import { defineLazyEventHandler } from \"h3\";\n\ndefineLazyEventHandler(async () => {\n  await initSomething(); // Will be executed only once\n  return (event) => {\n    return \"Response\";\n  };\n});\n",[203,745,746,759,763,778,792,807,816,821],{"__ignoreMap":213},[217,747,748,750,753,755,757],{"class":219,"line":220},[217,749,224],{"class":223},[217,751,752],{"class":227}," { defineLazyEventHandler } ",[217,754,231],{"class":223},[217,756,235],{"class":234},[217,758,238],{"class":227},[217,760,761],{"class":219,"line":241},[217,762,245],{"emptyLinePlaceholder":244},[217,764,765,767,769,771,774,776],{"class":219,"line":248},[217,766,736],{"class":264},[217,768,322],{"class":227},[217,770,360],{"class":223},[217,772,773],{"class":227}," () ",[217,775,299],{"class":223},[217,777,528],{"class":227},[217,779,780,783,786,789],{"class":219,"line":271},[217,781,782],{"class":223},"  await",[217,784,785],{"class":264}," initSomething",[217,787,788],{"class":227},"(); ",[217,790,791],{"class":542},"// Will be executed only once\n",[217,793,794,797,799,801,803,805],{"class":219,"line":276},[217,795,796],{"class":223},"  return",[217,798,363],{"class":227},[217,800,293],{"class":292},[217,802,296],{"class":227},[217,804,299],{"class":223},[217,806,528],{"class":227},[217,808,809,812,814],{"class":219,"line":308},[217,810,811],{"class":223},"    return",[217,813,302],{"class":234},[217,815,238],{"class":227},[217,817,818],{"class":219,"line":313},[217,819,820],{"class":227},"  };\n",[217,822,823],{"class":219,"line":550},[217,824,459],{"class":227},[199,826,827],{},"This is useful to define some one-time logic such as configuration, class initialization, heavy computation, etc.",[199,829,830],{},"Another use-case is lazy loading route chunks:",[832,833,834,932],"CodeGroup",{},[208,835,838],{"className":210,"code":836,"filename":837,"language":212,"meta":213,"style":213},"import { H3, defineLazyEventHandler } from \"h3\";\n\nconst app = new H3();\n\napp.all(\n  \"/route\",\n  defineLazyEventHandler(() => import(\"./route.mjs\").then((mod) => mod.default)),\n);\n","app.mjs",[203,839,840,853,857,871,875,885,892,928],{"__ignoreMap":213},[217,841,842,844,847,849,851],{"class":219,"line":220},[217,843,224],{"class":223},[217,845,846],{"class":227}," { H3, defineLazyEventHandler } ",[217,848,231],{"class":223},[217,850,235],{"class":234},[217,852,238],{"class":227},[217,854,855],{"class":219,"line":241},[217,856,245],{"emptyLinePlaceholder":244},[217,858,859,861,863,865,867,869],{"class":219,"line":248},[217,860,251],{"class":223},[217,862,255],{"class":254},[217,864,258],{"class":223},[217,866,261],{"class":223},[217,868,265],{"class":264},[217,870,268],{"class":227},[217,872,873],{"class":219,"line":271},[217,874,245],{"emptyLinePlaceholder":244},[217,876,877,879,882],{"class":219,"line":276},[217,878,316],{"class":227},[217,880,881],{"class":264},"all",[217,883,884],{"class":227},"(\n",[217,886,887,890],{"class":219,"line":308},[217,888,889],{"class":234},"  \"/route\"",[217,891,454],{"class":227},[217,893,894,897,900,902,905,907,910,913,916,918,921,923,925],{"class":219,"line":313},[217,895,896],{"class":264},"  defineLazyEventHandler",[217,898,899],{"class":227},"(() ",[217,901,299],{"class":223},[217,903,904],{"class":223}," import",[217,906,322],{"class":227},[217,908,909],{"class":234},"\"./route.mjs\"",[217,911,912],{"class":227},").",[217,914,915],{"class":264},"then",[217,917,289],{"class":227},[217,919,920],{"class":292},"mod",[217,922,296],{"class":227},[217,924,299],{"class":223},[217,926,927],{"class":227}," mod.default)),\n",[217,929,930],{"class":219,"line":550},[217,931,305],{"class":227},[208,933,936],{"className":210,"code":934,"filename":935,"language":212,"meta":213,"style":213},"import { defineHandler } from \"h3\";\n\nexport default defineHandler((event) => \"Hello!\");\n","route.mjs",[203,937,938,951,955],{"__ignoreMap":213},[217,939,940,942,945,947,949],{"class":219,"line":220},[217,941,224],{"class":223},[217,943,944],{"class":227}," { defineHandler } ",[217,946,231],{"class":223},[217,948,235],{"class":234},[217,950,238],{"class":227},[217,952,953],{"class":219,"line":241},[217,954,245],{"emptyLinePlaceholder":244},[217,956,957,960,963,965,967,969,971,973,976],{"class":219,"line":248},[217,958,959],{"class":223},"export",[217,961,962],{"class":223}," default",[217,964,286],{"class":264},[217,966,289],{"class":227},[217,968,293],{"class":292},[217,970,296],{"class":227},[217,972,299],{"class":223},[217,974,975],{"class":234}," \"Hello!\"",[217,977,305],{"class":227},[375,979,981],{"id":980},"converting-to-handler","Converting to Handler",[199,983,984],{},"There are situations that you might want to convert an event handler or utility made for Node.js or another framework to H3.\nThere are built-in utils to do this.",[380,986,988],{"id":987},"from-web-handlers","From Web Handlers",[199,990,991,992,997,998,1002,1003,1006,1007,206],{},"Request handlers with ",[339,993,99],{"href":994,"rel":995},"https://developer.mozilla.org/en-US/docs/Web/API/Request",[996],"nofollow"," => ",[339,999,104],{"href":1000,"rel":1001},"https://developer.mozilla.org/en-US/docs/Web/API/Response",[996]," signuture can be converted into H3 event handlers using ",[203,1004,1005],{},"fromWebHandler"," utility or ",[339,1008,1010],{"href":1009},"/guide/api/h3#h3mount","H3.mount",[208,1012,1014],{"className":210,"code":1013,"language":212,"meta":213,"style":213},"import { H3, fromWebHandler } from \"h3\";\n\nexport const app = new H3();\n\nconst webHandler = (request) => new Response(\"👋 Hello!\");\n\n// Using fromWebHandler utility\napp.all(\"/web\", fromWebHandler(webHandler));\n\n// Using simple wrapper\napp.all(\"/web\", (event) => webHandler(event.req));\n\n// Using app.mount\napp.mount(\"/web\", webHandler);\n",[203,1015,1016,1029,1033,1050,1054,1084,1088,1093,1111,1115,1120,1144,1148,1154],{"__ignoreMap":213},[217,1017,1018,1020,1023,1025,1027],{"class":219,"line":220},[217,1019,224],{"class":223},[217,1021,1022],{"class":227}," { H3, fromWebHandler } ",[217,1024,231],{"class":223},[217,1026,235],{"class":234},[217,1028,238],{"class":227},[217,1030,1031],{"class":219,"line":241},[217,1032,245],{"emptyLinePlaceholder":244},[217,1034,1035,1037,1040,1042,1044,1046,1048],{"class":219,"line":248},[217,1036,959],{"class":223},[217,1038,1039],{"class":223}," const",[217,1041,255],{"class":254},[217,1043,258],{"class":223},[217,1045,261],{"class":223},[217,1047,265],{"class":264},[217,1049,268],{"class":227},[217,1051,1052],{"class":219,"line":271},[217,1053,245],{"emptyLinePlaceholder":244},[217,1055,1056,1058,1061,1063,1065,1068,1070,1072,1074,1077,1079,1082],{"class":219,"line":276},[217,1057,251],{"class":223},[217,1059,1060],{"class":264}," webHandler",[217,1062,258],{"class":223},[217,1064,363],{"class":227},[217,1066,1067],{"class":292},"request",[217,1069,296],{"class":227},[217,1071,299],{"class":223},[217,1073,261],{"class":223},[217,1075,1076],{"class":264}," Response",[217,1078,322],{"class":227},[217,1080,1081],{"class":234},"\"👋 Hello!\"",[217,1083,305],{"class":227},[217,1085,1086],{"class":219,"line":308},[217,1087,245],{"emptyLinePlaceholder":244},[217,1089,1090],{"class":219,"line":313},[217,1091,1092],{"class":542},"// Using fromWebHandler utility\n",[217,1094,1095,1097,1099,1101,1104,1106,1108],{"class":219,"line":550},[217,1096,316],{"class":227},[217,1098,881],{"class":264},[217,1100,322],{"class":227},[217,1102,1103],{"class":234},"\"/web\"",[217,1105,567],{"class":227},[217,1107,1005],{"class":264},[217,1109,1110],{"class":227},"(webHandler));\n",[217,1112,1113],{"class":219,"line":555},[217,1114,245],{"emptyLinePlaceholder":244},[217,1116,1117],{"class":219,"line":574},[217,1118,1119],{"class":542},"// Using simple wrapper\n",[217,1121,1122,1124,1126,1128,1130,1133,1135,1137,1139,1141],{"class":219,"line":586},[217,1123,316],{"class":227},[217,1125,881],{"class":264},[217,1127,322],{"class":227},[217,1129,1103],{"class":234},[217,1131,1132],{"class":227},", (",[217,1134,293],{"class":292},[217,1136,296],{"class":227},[217,1138,299],{"class":223},[217,1140,1060],{"class":264},[217,1142,1143],{"class":227},"(event.req));\n",[217,1145,1146],{"class":219,"line":603},[217,1147,245],{"emptyLinePlaceholder":244},[217,1149,1151],{"class":219,"line":1150},13,[217,1152,1153],{"class":542},"// Using app.mount\n",[217,1155,1157,1159,1162,1164,1166],{"class":219,"line":1156},14,[217,1158,316],{"class":227},[217,1160,1161],{"class":264},"mount",[217,1163,322],{"class":227},[217,1165,1103],{"class":234},[217,1167,1168],{"class":227},", webHandler);\n",[380,1170,1172],{"id":1171},"from-nodejs-handlers","From Node.js Handlers",[199,1174,1175,1176,1179,1180,1183],{},"If you have a legacy request handler with ",[203,1177,1178],{},"(req, res) => {}"," syntax made for Node.js, you can use ",[203,1181,1182],{},"fromNodeHandler"," to convert it to an h3 event handler.",[1185,1186,1187],"important",{},[199,1188,1189],{},"\nNode.js event handlers can only run within Node.js server runtime!",[208,1191,1193],{"className":210,"code":1192,"language":212,"meta":213,"style":213},"import { H3, fromNodeHandler } from \"h3\";\n\n// Force using Node.js compatibility (also works with Bun and Deno)\nimport { serve } from \"h3/node\";\n\nexport const app = new H3();\n\nconst nodeHandler = (req, res) => {\n  res.end(\"Node handlers work!\");\n};\n\napp.get(\"/web\", fromNodeHandler(nodeHandler));\n",[203,1194,1195,1208,1212,1217,1231,1235,1251,1255,1279,1294,1299,1303],{"__ignoreMap":213},[217,1196,1197,1199,1202,1204,1206],{"class":219,"line":220},[217,1198,224],{"class":223},[217,1200,1201],{"class":227}," { H3, fromNodeHandler } ",[217,1203,231],{"class":223},[217,1205,235],{"class":234},[217,1207,238],{"class":227},[217,1209,1210],{"class":219,"line":241},[217,1211,245],{"emptyLinePlaceholder":244},[217,1213,1214],{"class":219,"line":248},[217,1215,1216],{"class":542},"// Force using Node.js compatibility (also works with Bun and Deno)\n",[217,1218,1219,1221,1224,1226,1229],{"class":219,"line":271},[217,1220,224],{"class":223},[217,1222,1223],{"class":227}," { serve } ",[217,1225,231],{"class":223},[217,1227,1228],{"class":234}," \"h3/node\"",[217,1230,238],{"class":227},[217,1232,1233],{"class":219,"line":276},[217,1234,245],{"emptyLinePlaceholder":244},[217,1236,1237,1239,1241,1243,1245,1247,1249],{"class":219,"line":308},[217,1238,959],{"class":223},[217,1240,1039],{"class":223},[217,1242,255],{"class":254},[217,1244,258],{"class":223},[217,1246,261],{"class":223},[217,1248,265],{"class":264},[217,1250,268],{"class":227},[217,1252,1253],{"class":219,"line":313},[217,1254,245],{"emptyLinePlaceholder":244},[217,1256,1257,1259,1262,1264,1266,1268,1270,1273,1275,1277],{"class":219,"line":550},[217,1258,251],{"class":223},[217,1260,1261],{"class":264}," nodeHandler",[217,1263,258],{"class":223},[217,1265,363],{"class":227},[217,1267,665],{"class":292},[217,1269,567],{"class":227},[217,1271,1272],{"class":292},"res",[217,1274,296],{"class":227},[217,1276,299],{"class":223},[217,1278,528],{"class":227},[217,1280,1281,1284,1287,1289,1292],{"class":219,"line":555},[217,1282,1283],{"class":227},"  res.",[217,1285,1286],{"class":264},"end",[217,1288,322],{"class":227},[217,1290,1291],{"class":234},"\"Node handlers work!\"",[217,1293,305],{"class":227},[217,1295,1296],{"class":219,"line":574},[217,1297,1298],{"class":227},"};\n",[217,1300,1301],{"class":219,"line":586},[217,1302,245],{"emptyLinePlaceholder":244},[217,1304,1305,1307,1309,1311,1313,1315,1317],{"class":219,"line":603},[217,1306,316],{"class":227},[217,1308,319],{"class":264},[217,1310,322],{"class":227},[217,1312,1103],{"class":234},[217,1314,567],{"class":227},[217,1316,1182],{"class":264},[217,1318,1319],{"class":227},"(nodeHandler));\n",[1321,1322,1323],"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 .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}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 .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":213,"searchDepth":241,"depth":241,"links":1325},[1326,1330,1332,1333],{"id":377,"depth":241,"text":378,"children":1327},[1328,1329],{"id":382,"depth":248,"text":382},{"id":468,"depth":248,"text":468},{"id":615,"depth":241,"text":1331},"Handler .fetch",{"id":729,"depth":241,"text":730},{"id":980,"depth":241,"text":981,"children":1334},[1335,1336],{"id":987,"depth":248,"text":988},{"id":1171,"depth":248,"text":1172},"An event handler is a function that receives an H3Event and returns a response.","md",{"icon":36},{"icon":36},{"title":33,"description":1337},"aKYNI18C5IOm2adian2rCfMj1uf8eue1R3X8xsIb0zY",[1344,1346],{"title":28,"path":29,"stem":30,"description":1345,"icon":31,"children":-1},"Intercept request, response and errors using H3 middleware.",{"title":38,"path":39,"stem":40,"description":1347,"icon":41,"children":-1},"H3 automatically converts any returned value into a web response.",1783690727863]