[{"data":1,"prerenderedAt":1308},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fcore-concepts\u002Fexceptions":176,"\u002Fdocs\u002Fcore-concepts\u002Fexceptions-surround":1303},[4,21,86,158],{"title":5,"path":6,"stem":7,"children":8,"status":11,"icon":20},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[9,12,16],{"title":10,"path":6,"stem":7,"status":11},"Introduction",null,{"title":13,"path":14,"stem":15,"status":11},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","1.docs\u002F1.getting-started\u002F2.installation",{"title":17,"path":18,"stem":19,"status":11},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","1.docs\u002F1.getting-started\u002F3.quick-start",false,{"title":22,"path":23,"stem":24,"children":25,"status":11,"icon":20},"Core Concepts","\u002Fdocs\u002Fcore-concepts","1.docs\u002F2.core-concepts\u002F1.index",[26,28,32,36,46,50,54,58,62,66,70,74,78,82],{"title":27,"path":23,"stem":24,"status":11},"Overview",{"title":29,"path":30,"stem":31,"status":11},"Response","\u002Fdocs\u002Fcore-concepts\u002Fresponse","1.docs\u002F2.core-concepts\u002F10.response",{"title":33,"path":34,"stem":35,"status":11},"Testing","\u002Fdocs\u002Fcore-concepts\u002Ftesting","1.docs\u002F2.core-concepts\u002F12.testing",{"title":37,"path":38,"stem":39,"children":40,"status":11,"icon":20,"defaultOpen":20},"Decorators","\u002Fdocs\u002Fcore-concepts\u002Fdecorators","1.docs\u002F2.core-concepts\u002F13.decorators\u002F1.index",[41,42],{"title":27,"path":38,"stem":39,"status":11},{"title":43,"path":44,"stem":45,"status":11},"Custom","\u002Fdocs\u002Fcore-concepts\u002Fdecorators\u002Fcustom","1.docs\u002F2.core-concepts\u002F13.decorators\u002F2.custom",{"title":47,"path":48,"stem":49,"status":11},"Discovery Service","\u002Fdocs\u002Fcore-concepts\u002Fdiscovery","1.docs\u002F2.core-concepts\u002F14.discovery",{"title":51,"path":52,"stem":53,"status":11},"Application Lifecycle","\u002Fdocs\u002Fcore-concepts\u002Fapp-lifecycle","1.docs\u002F2.core-concepts\u002F15.app-lifecycle",{"title":55,"path":56,"stem":57,"status":11},"Controllers","\u002Fdocs\u002Fcore-concepts\u002Fcontrollers","1.docs\u002F2.core-concepts\u002F2.controllers",{"title":59,"path":60,"stem":61,"status":11},"Routing","\u002Fdocs\u002Fcore-concepts\u002Frouting","1.docs\u002F2.core-concepts\u002F3.routing",{"title":63,"path":64,"stem":65,"status":11},"Providers","\u002Fdocs\u002Fcore-concepts\u002Fproviders","1.docs\u002F2.core-concepts\u002F4.providers",{"title":67,"path":68,"stem":69,"status":11},"Modules","\u002Fdocs\u002Fcore-concepts\u002Fmodules","1.docs\u002F2.core-concepts\u002F5.modules",{"title":71,"path":72,"stem":73,"status":11},"Configuration","\u002Fdocs\u002Fcore-concepts\u002Fconfiguration","1.docs\u002F2.core-concepts\u002F6.configuration",{"title":75,"path":76,"stem":77,"status":11},"Middleware","\u002Fdocs\u002Fcore-concepts\u002Fmiddleware","1.docs\u002F2.core-concepts\u002F7.middleware",{"title":79,"path":80,"stem":81,"status":11},"Guards","\u002Fdocs\u002Fcore-concepts\u002Fguards","1.docs\u002F2.core-concepts\u002F8.guards",{"title":83,"path":84,"stem":85,"status":11},"Exceptions","\u002Fdocs\u002Fcore-concepts\u002Fexceptions","1.docs\u002F2.core-concepts\u002F9.exceptions",{"title":87,"path":88,"stem":89,"children":90,"status":11,"icon":20},"Packages","\u002Fdocs\u002Fpackages","1.docs\u002F3.packages\u002F1.index",[91,92,97,108,112,130,134,138,142,146,150,154],{"title":27,"path":88,"stem":89,"status":11},{"title":93,"path":94,"stem":95,"status":96},"CLI","\u002Fdocs\u002Fpackages\u002Fcli","1.docs\u002F3.packages\u002F10.cli","experimental",{"title":98,"path":99,"stem":100,"children":101,"status":11,"icon":20,"defaultOpen":20},"Events","\u002Fdocs\u002Fpackages\u002Fmessaging","1.docs\u002F3.packages\u002F11.messaging\u002F1.index",[102,104],{"title":27,"path":99,"stem":100,"status":103},"beta",{"title":105,"path":106,"stem":107,"status":96},"Redis","\u002Fdocs\u002Fpackages\u002Fmessaging\u002Fredis","1.docs\u002F3.packages\u002F11.messaging\u002F2.redis",{"title":109,"path":110,"stem":111,"status":103},"Serve Static","\u002Fdocs\u002Fpackages\u002Fserve-static","1.docs\u002F3.packages\u002F12.serve-static",{"title":113,"path":114,"stem":115,"children":116,"status":11,"icon":20,"defaultOpen":20},"Auth","\u002Fdocs\u002Fpackages\u002Fauth","1.docs\u002F3.packages\u002F2.auth\u002F1.index",[117,118,122,126],{"title":27,"path":114,"stem":115,"status":103},{"title":119,"path":120,"stem":121,"status":103},"JWT Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Fjwt","1.docs\u002F3.packages\u002F2.auth\u002F2.jwt",{"title":123,"path":124,"stem":125,"status":103},"Local Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Flocal","1.docs\u002F3.packages\u002F2.auth\u002F3.local",{"title":127,"path":128,"stem":129,"status":96},"OAuth2 Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Foauth2","1.docs\u002F3.packages\u002F2.auth\u002F4.oauth2",{"title":131,"path":132,"stem":133,"status":103},"JWT","\u002Fdocs\u002Fpackages\u002Fjwt","1.docs\u002F3.packages\u002F3.jwt",{"title":135,"path":136,"stem":137,"status":103},"Drizzle","\u002Fdocs\u002Fpackages\u002Fdrizzle","1.docs\u002F3.packages\u002F4.drizzle",{"title":139,"path":140,"stem":141,"status":103},"Papr","\u002Fdocs\u002Fpackages\u002Fpapr","1.docs\u002F3.packages\u002F5.papr",{"title":143,"path":144,"stem":145,"status":103},"Mongoose","\u002Fdocs\u002Fpackages\u002Fmongoose","1.docs\u002F3.packages\u002F6.mongoose",{"title":147,"path":148,"stem":149,"status":103},"Swagger","\u002Fdocs\u002Fpackages\u002Fswagger","1.docs\u002F3.packages\u002F7.swagger",{"title":151,"path":152,"stem":153,"status":103},"Node Server","\u002Fdocs\u002Fpackages\u002Fnode-server","1.docs\u002F3.packages\u002F8.node-server",{"title":155,"path":156,"stem":157,"status":103},"uWS Server","\u002Fdocs\u002Fpackages\u002Fuws-server","1.docs\u002F3.packages\u002F9.uws-server",{"title":159,"path":160,"stem":161,"children":162,"status":11,"icon":20},"Roadmap","\u002Fdocs\u002Froadmap","1.docs\u002F4.roadmap\u002F1.index",[163,164,168,172],{"title":27,"path":160,"stem":161,"status":11},{"title":165,"path":166,"stem":167,"status":11},"Short term (0-3 months)","\u002Fdocs\u002Froadmap\u002Fshort-term","1.docs\u002F4.roadmap\u002F2.short-term",{"title":169,"path":170,"stem":171,"status":11},"Mid term (3-9 months)","\u002Fdocs\u002Froadmap\u002Fmid-term","1.docs\u002F4.roadmap\u002F3.mid-term",{"title":173,"path":174,"stem":175,"status":11},"Long term (9-12+ months)","\u002Fdocs\u002Froadmap\u002Flong-term","1.docs\u002F4.roadmap\u002F4.long-term",{"id":177,"title":83,"body":178,"description":1298,"extension":1299,"meta":1300,"navigation":241,"path":84,"seo":1301,"status":11,"stem":85,"__hash__":1302},"docs\u002F1.docs\u002F2.core-concepts\u002F9.exceptions.md",{"type":179,"value":180,"toc":1288},"minimark",[181,185,190,193,296,299,411,416,447,451,563,567,923,927,930,949,1018,1022,1025,1284],[182,183,184],"p",{},"MiiaJS provides a set of built-in exception classes that produce structured JSON error responses.",[186,187,189],"h2",{"id":188},"httpexception","HttpException",[182,191,192],{},"The base class for all HTTP exceptions:",[194,195,200],"pre",{"className":196,"code":197,"language":198,"meta":199,"style":199},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { HttpException } from '@miiajs\u002Fcore'\n\nthrow new HttpException(400, 'Invalid input', { field: 'email' })\n","typescript","",[201,202,203,236,243],"code",{"__ignoreMap":199},[204,205,208,212,216,220,223,226,229,233],"span",{"class":206,"line":207},"line",1,[204,209,211],{"class":210},"s7zQu","import",[204,213,215],{"class":214},"sMK4o"," {",[204,217,219],{"class":218},"sTEyZ"," HttpException",[204,221,222],{"class":214}," }",[204,224,225],{"class":210}," from",[204,227,228],{"class":214}," '",[204,230,232],{"class":231},"sfazB","@miiajs\u002Fcore",[204,234,235],{"class":214},"'\n",[204,237,239],{"class":206,"line":238},2,[204,240,242],{"emptyLinePlaceholder":241},true,"\n",[204,244,246,249,252,255,258,262,265,267,270,273,275,277,281,284,286,289,291,293],{"class":206,"line":245},3,[204,247,248],{"class":210},"throw",[204,250,251],{"class":214}," new",[204,253,219],{"class":254},"s2Zo4",[204,256,257],{"class":218},"(",[204,259,261],{"class":260},"sbssI","400",[204,263,264],{"class":214},",",[204,266,228],{"class":214},[204,268,269],{"class":231},"Invalid input",[204,271,272],{"class":214},"'",[204,274,264],{"class":214},[204,276,215],{"class":214},[204,278,280],{"class":279},"swJcz"," field",[204,282,283],{"class":214},":",[204,285,228],{"class":214},[204,287,288],{"class":231},"email",[204,290,272],{"class":214},[204,292,222],{"class":214},[204,294,295],{"class":218},")\n",[182,297,298],{},"Response:",[194,300,304],{"className":301,"code":302,"language":303,"meta":199,"style":199},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"statusCode\": 400,\n  \"error\": \"Bad Request\",\n  \"message\": \"Invalid input\",\n  \"details\": { \"field\": \"email\" }\n}\n","json",[201,305,306,311,331,352,372,405],{"__ignoreMap":199},[204,307,308],{"class":206,"line":207},[204,309,310],{"class":214},"{\n",[204,312,313,316,320,323,325,328],{"class":206,"line":238},[204,314,315],{"class":214},"  \"",[204,317,319],{"class":318},"spNyl","statusCode",[204,321,322],{"class":214},"\"",[204,324,283],{"class":214},[204,326,327],{"class":260}," 400",[204,329,330],{"class":214},",\n",[204,332,333,335,338,340,342,345,348,350],{"class":206,"line":245},[204,334,315],{"class":214},[204,336,337],{"class":318},"error",[204,339,322],{"class":214},[204,341,283],{"class":214},[204,343,344],{"class":214}," \"",[204,346,347],{"class":231},"Bad Request",[204,349,322],{"class":214},[204,351,330],{"class":214},[204,353,355,357,360,362,364,366,368,370],{"class":206,"line":354},4,[204,356,315],{"class":214},[204,358,359],{"class":318},"message",[204,361,322],{"class":214},[204,363,283],{"class":214},[204,365,344],{"class":214},[204,367,269],{"class":231},[204,369,322],{"class":214},[204,371,330],{"class":214},[204,373,375,377,380,382,384,386,388,392,394,396,398,400,402],{"class":206,"line":374},5,[204,376,315],{"class":214},[204,378,379],{"class":318},"details",[204,381,322],{"class":214},[204,383,283],{"class":214},[204,385,215],{"class":214},[204,387,344],{"class":214},[204,389,391],{"class":390},"sBMFI","field",[204,393,322],{"class":214},[204,395,283],{"class":214},[204,397,344],{"class":214},[204,399,288],{"class":231},[204,401,322],{"class":214},[204,403,404],{"class":214}," }\n",[204,406,408],{"class":206,"line":407},6,[204,409,410],{"class":214},"}\n",[412,413,415],"h3",{"id":414},"constructor","Constructor",[194,417,419],{"className":196,"code":418,"language":198,"meta":199,"style":199},"new HttpException(statusCode: number, message: string, details?: any)\n",[201,420,421],{"__ignoreMap":199},[204,422,423,426,428,431,433,436,438,441,444],{"class":206,"line":207},[204,424,425],{"class":214},"new",[204,427,219],{"class":254},[204,429,430],{"class":218},"(statusCode: number",[204,432,264],{"class":214},[204,434,435],{"class":218}," message: string",[204,437,264],{"class":214},[204,439,440],{"class":218}," details",[204,442,443],{"class":214},"?:",[204,445,446],{"class":218}," any)\n",[186,448,450],{"id":449},"built-in-exceptions","Built-in exceptions",[452,453,454,470],"table",{},[455,456,457],"thead",{},[458,459,460,464,467],"tr",{},[461,462,463],"th",{},"Class",[461,465,466],{},"Status",[461,468,469],{},"Default message",[471,472,473,485,498,511,524,537,550],"tbody",{},[458,474,475,481,483],{},[476,477,478],"td",{},[201,479,480],{},"BadRequestException",[476,482,261],{},[476,484,347],{},[458,486,487,492,495],{},[476,488,489],{},[201,490,491],{},"UnauthorizedException",[476,493,494],{},"401",[476,496,497],{},"Unauthorized",[458,499,500,505,508],{},[476,501,502],{},[201,503,504],{},"ForbiddenException",[476,506,507],{},"403",[476,509,510],{},"Forbidden",[458,512,513,518,521],{},[476,514,515],{},[201,516,517],{},"NotFoundException",[476,519,520],{},"404",[476,522,523],{},"Not Found",[458,525,526,531,534],{},[476,527,528],{},[201,529,530],{},"ConflictException",[476,532,533],{},"409",[476,535,536],{},"Conflict",[458,538,539,544,547],{},[476,540,541],{},[201,542,543],{},"UnprocessableException",[476,545,546],{},"422",[476,548,549],{},"Unprocessable Entity",[458,551,552,557,560],{},[476,553,554],{},[201,555,556],{},"InternalServerException",[476,558,559],{},"500",[476,561,562],{},"Internal Server Error",[412,564,566],{"id":565},"usage","Usage",[194,568,570],{"className":196,"code":569,"language":198,"meta":199,"style":199},"import { NotFoundException, BadRequestException } from '@miiajs\u002Fcore'\n\n@Get('\u002F:id')\nasync findOne(ctx: RequestContext) {\n  const user = await this.userService.findById(ctx.params.id)\n  if (!user) {\n    throw new NotFoundException(`User ${ctx.params.id} not found`)\n  }\n  return user\n}\n\n@Post('\u002F')\nasync create(ctx: RequestContext) {\n  const body = await ctx.json\u003C{ email: string }>()\n  const exists = await this.userService.findByEmail(body.email)\n  if (exists) {\n    throw new ConflictException('Email already exists')\n  }\n  return this.userService.create(body)\n}\n",[201,571,572,596,600,619,632,675,694,735,741,750,755,760,779,791,827,859,873,894,899,918],{"__ignoreMap":199},[204,573,574,576,578,581,583,586,588,590,592,594],{"class":206,"line":207},[204,575,211],{"class":210},[204,577,215],{"class":214},[204,579,580],{"class":218}," NotFoundException",[204,582,264],{"class":214},[204,584,585],{"class":218}," BadRequestException",[204,587,222],{"class":214},[204,589,225],{"class":210},[204,591,228],{"class":214},[204,593,232],{"class":231},[204,595,235],{"class":214},[204,597,598],{"class":206,"line":238},[204,599,242],{"emptyLinePlaceholder":241},[204,601,602,605,608,610,612,615,617],{"class":206,"line":245},[204,603,604],{"class":214},"@",[204,606,607],{"class":254},"Get",[204,609,257],{"class":218},[204,611,272],{"class":214},[204,613,614],{"class":231},"\u002F:id",[204,616,272],{"class":214},[204,618,295],{"class":218},[204,620,621,624,627,630],{"class":206,"line":354},[204,622,623],{"class":218},"async ",[204,625,626],{"class":254},"findOne",[204,628,629],{"class":218},"(ctx: RequestContext) ",[204,631,310],{"class":214},[204,633,634,637,640,643,646,649,652,655,658,660,663,665,668,670,673],{"class":206,"line":374},[204,635,636],{"class":318},"  const",[204,638,639],{"class":218}," user",[204,641,642],{"class":214}," =",[204,644,645],{"class":210}," await",[204,647,648],{"class":214}," this.",[204,650,651],{"class":218},"userService",[204,653,654],{"class":214},".",[204,656,657],{"class":254},"findById",[204,659,257],{"class":279},[204,661,662],{"class":218},"ctx",[204,664,654],{"class":214},[204,666,667],{"class":218},"params",[204,669,654],{"class":214},[204,671,672],{"class":218},"id",[204,674,295],{"class":279},[204,676,677,680,683,686,689,692],{"class":206,"line":407},[204,678,679],{"class":210},"  if",[204,681,682],{"class":279}," (",[204,684,685],{"class":214},"!",[204,687,688],{"class":218},"user",[204,690,691],{"class":279},") ",[204,693,310],{"class":214},[204,695,697,700,702,704,706,709,712,715,717,719,721,723,725,728,731,733],{"class":206,"line":696},7,[204,698,699],{"class":210},"    throw",[204,701,251],{"class":214},[204,703,580],{"class":254},[204,705,257],{"class":279},[204,707,708],{"class":214},"`",[204,710,711],{"class":231},"User ",[204,713,714],{"class":214},"${",[204,716,662],{"class":218},[204,718,654],{"class":214},[204,720,667],{"class":218},[204,722,654],{"class":214},[204,724,672],{"class":218},[204,726,727],{"class":214},"}",[204,729,730],{"class":231}," not found",[204,732,708],{"class":214},[204,734,295],{"class":279},[204,736,738],{"class":206,"line":737},8,[204,739,740],{"class":214},"  }\n",[204,742,744,747],{"class":206,"line":743},9,[204,745,746],{"class":210},"  return",[204,748,749],{"class":218}," user\n",[204,751,753],{"class":206,"line":752},10,[204,754,410],{"class":214},[204,756,758],{"class":206,"line":757},11,[204,759,242],{"emptyLinePlaceholder":241},[204,761,763,765,768,770,772,775,777],{"class":206,"line":762},12,[204,764,604],{"class":214},[204,766,767],{"class":254},"Post",[204,769,257],{"class":218},[204,771,272],{"class":214},[204,773,774],{"class":231},"\u002F",[204,776,272],{"class":214},[204,778,295],{"class":218},[204,780,782,784,787,789],{"class":206,"line":781},13,[204,783,623],{"class":218},[204,785,786],{"class":254},"create",[204,788,629],{"class":218},[204,790,310],{"class":214},[204,792,794,796,799,801,803,806,808,810,813,816,818,821,824],{"class":206,"line":793},14,[204,795,636],{"class":318},[204,797,798],{"class":218}," body",[204,800,642],{"class":214},[204,802,645],{"class":210},[204,804,805],{"class":218}," ctx",[204,807,654],{"class":214},[204,809,303],{"class":254},[204,811,812],{"class":214},"\u003C{",[204,814,815],{"class":279}," email",[204,817,283],{"class":214},[204,819,820],{"class":390}," string",[204,822,823],{"class":214}," }>",[204,825,826],{"class":279},"()\n",[204,828,830,832,835,837,839,841,843,845,848,850,853,855,857],{"class":206,"line":829},15,[204,831,636],{"class":318},[204,833,834],{"class":218}," exists",[204,836,642],{"class":214},[204,838,645],{"class":210},[204,840,648],{"class":214},[204,842,651],{"class":218},[204,844,654],{"class":214},[204,846,847],{"class":254},"findByEmail",[204,849,257],{"class":279},[204,851,852],{"class":218},"body",[204,854,654],{"class":214},[204,856,288],{"class":218},[204,858,295],{"class":279},[204,860,862,864,866,869,871],{"class":206,"line":861},16,[204,863,679],{"class":210},[204,865,682],{"class":279},[204,867,868],{"class":218},"exists",[204,870,691],{"class":279},[204,872,310],{"class":214},[204,874,876,878,880,883,885,887,890,892],{"class":206,"line":875},17,[204,877,699],{"class":210},[204,879,251],{"class":214},[204,881,882],{"class":254}," ConflictException",[204,884,257],{"class":279},[204,886,272],{"class":214},[204,888,889],{"class":231},"Email already exists",[204,891,272],{"class":214},[204,893,295],{"class":279},[204,895,897],{"class":206,"line":896},18,[204,898,740],{"class":214},[204,900,902,904,906,908,910,912,914,916],{"class":206,"line":901},19,[204,903,746],{"class":210},[204,905,648],{"class":214},[204,907,651],{"class":218},[204,909,654],{"class":214},[204,911,786],{"class":254},[204,913,257],{"class":279},[204,915,852],{"class":218},[204,917,295],{"class":279},[204,919,921],{"class":206,"line":920},20,[204,922,410],{"class":214},[186,924,926],{"id":925},"error-handling","Error handling",[182,928,929],{},"MiiaJS automatically catches all exceptions thrown in route handlers and middleware:",[931,932,933,940],"ul",{},[934,935,936,939],"li",{},[937,938,189],"strong",{}," instances are returned with their status code and JSON body",[934,941,942,945,946],{},[937,943,944],{},"All other errors"," are logged and returned as ",[201,947,948],{},"500 Internal Server Error",[194,950,952],{"className":196,"code":951,"language":198,"meta":199,"style":199},"\u002F\u002F HttpException -> returned as-is\nthrow new NotFoundException('Not found')\n\u002F\u002F -> { statusCode: 404, error: \"Not Found\", message: \"Not found\" }\n\n\u002F\u002F Unknown error -> 500\nthrow new Error('something broke')\n\u002F\u002F -> { statusCode: 500, error: \"Internal Server Error\", message: \"Internal Server Error\" }\n",[201,953,954,960,979,984,988,993,1013],{"__ignoreMap":199},[204,955,956],{"class":206,"line":207},[204,957,959],{"class":958},"sHwdD","\u002F\u002F HttpException -> returned as-is\n",[204,961,962,964,966,968,970,972,975,977],{"class":206,"line":238},[204,963,248],{"class":210},[204,965,251],{"class":214},[204,967,580],{"class":254},[204,969,257],{"class":218},[204,971,272],{"class":214},[204,973,974],{"class":231},"Not found",[204,976,272],{"class":214},[204,978,295],{"class":218},[204,980,981],{"class":206,"line":245},[204,982,983],{"class":958},"\u002F\u002F -> { statusCode: 404, error: \"Not Found\", message: \"Not found\" }\n",[204,985,986],{"class":206,"line":354},[204,987,242],{"emptyLinePlaceholder":241},[204,989,990],{"class":206,"line":374},[204,991,992],{"class":958},"\u002F\u002F Unknown error -> 500\n",[204,994,995,997,999,1002,1004,1006,1009,1011],{"class":206,"line":407},[204,996,248],{"class":210},[204,998,251],{"class":214},[204,1000,1001],{"class":254}," Error",[204,1003,257],{"class":218},[204,1005,272],{"class":214},[204,1007,1008],{"class":231},"something broke",[204,1010,272],{"class":214},[204,1012,295],{"class":218},[204,1014,1015],{"class":206,"line":696},[204,1016,1017],{"class":958},"\u002F\u002F -> { statusCode: 500, error: \"Internal Server Error\", message: \"Internal Server Error\" }\n",[186,1019,1021],{"id":1020},"custom-error-handling","Custom error handling",[182,1023,1024],{},"Use middleware for custom error handling:",[194,1026,1028],{"className":196,"code":1027,"language":198,"meta":199,"style":199},"const errorHandler: Middleware = async (ctx, next) => {\n  try {\n    await next()\n  } catch (error) {\n    if (error instanceof HttpException) {\n      ctx.res.status(error.statusCode).json(error.toJSON())\n    } else {\n      ctx.res.status(500).json({\n        error: 'Unexpected error',\n        requestId: ctx.req.headers.get('x-request-id'),\n      })\n    }\n  }\n}\n\napp.use(errorHandler)\n",[201,1029,1030,1067,1074,1083,1099,1117,1158,1168,1194,1210,1247,1254,1259,1263,1267,1271],{"__ignoreMap":199},[204,1031,1032,1035,1038,1040,1043,1045,1048,1050,1053,1055,1058,1061,1064],{"class":206,"line":207},[204,1033,1034],{"class":318},"const",[204,1036,1037],{"class":218}," errorHandler",[204,1039,283],{"class":214},[204,1041,1042],{"class":390}," Middleware",[204,1044,642],{"class":214},[204,1046,1047],{"class":318}," async",[204,1049,682],{"class":214},[204,1051,662],{"class":1052},"sHdIc",[204,1054,264],{"class":214},[204,1056,1057],{"class":1052}," next",[204,1059,1060],{"class":214},")",[204,1062,1063],{"class":318}," =>",[204,1065,1066],{"class":214}," {\n",[204,1068,1069,1072],{"class":206,"line":238},[204,1070,1071],{"class":210},"  try",[204,1073,1066],{"class":214},[204,1075,1076,1079,1081],{"class":206,"line":245},[204,1077,1078],{"class":210},"    await",[204,1080,1057],{"class":254},[204,1082,826],{"class":279},[204,1084,1085,1088,1091,1093,1095,1097],{"class":206,"line":354},[204,1086,1087],{"class":214},"  }",[204,1089,1090],{"class":210}," catch",[204,1092,682],{"class":279},[204,1094,337],{"class":218},[204,1096,691],{"class":279},[204,1098,310],{"class":214},[204,1100,1101,1104,1106,1108,1111,1113,1115],{"class":206,"line":374},[204,1102,1103],{"class":210},"    if",[204,1105,682],{"class":279},[204,1107,337],{"class":218},[204,1109,1110],{"class":214}," instanceof",[204,1112,219],{"class":390},[204,1114,691],{"class":279},[204,1116,310],{"class":214},[204,1118,1119,1122,1124,1127,1129,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150,1152,1155],{"class":206,"line":407},[204,1120,1121],{"class":218},"      ctx",[204,1123,654],{"class":214},[204,1125,1126],{"class":218},"res",[204,1128,654],{"class":214},[204,1130,1131],{"class":254},"status",[204,1133,257],{"class":279},[204,1135,337],{"class":218},[204,1137,654],{"class":214},[204,1139,319],{"class":218},[204,1141,1060],{"class":279},[204,1143,654],{"class":214},[204,1145,303],{"class":254},[204,1147,257],{"class":279},[204,1149,337],{"class":218},[204,1151,654],{"class":214},[204,1153,1154],{"class":254},"toJSON",[204,1156,1157],{"class":279},"())\n",[204,1159,1160,1163,1166],{"class":206,"line":696},[204,1161,1162],{"class":214},"    }",[204,1164,1165],{"class":210}," else",[204,1167,1066],{"class":214},[204,1169,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188,1190,1192],{"class":206,"line":737},[204,1171,1121],{"class":218},[204,1173,654],{"class":214},[204,1175,1126],{"class":218},[204,1177,654],{"class":214},[204,1179,1131],{"class":254},[204,1181,257],{"class":279},[204,1183,559],{"class":260},[204,1185,1060],{"class":279},[204,1187,654],{"class":214},[204,1189,303],{"class":254},[204,1191,257],{"class":279},[204,1193,310],{"class":214},[204,1195,1196,1199,1201,1203,1206,1208],{"class":206,"line":743},[204,1197,1198],{"class":279},"        error",[204,1200,283],{"class":214},[204,1202,228],{"class":214},[204,1204,1205],{"class":231},"Unexpected error",[204,1207,272],{"class":214},[204,1209,330],{"class":214},[204,1211,1212,1215,1217,1219,1221,1224,1226,1229,1231,1234,1236,1238,1241,1243,1245],{"class":206,"line":752},[204,1213,1214],{"class":279},"        requestId",[204,1216,283],{"class":214},[204,1218,805],{"class":218},[204,1220,654],{"class":214},[204,1222,1223],{"class":218},"req",[204,1225,654],{"class":214},[204,1227,1228],{"class":218},"headers",[204,1230,654],{"class":214},[204,1232,1233],{"class":254},"get",[204,1235,257],{"class":279},[204,1237,272],{"class":214},[204,1239,1240],{"class":231},"x-request-id",[204,1242,272],{"class":214},[204,1244,1060],{"class":279},[204,1246,330],{"class":214},[204,1248,1249,1252],{"class":206,"line":757},[204,1250,1251],{"class":214},"      }",[204,1253,295],{"class":279},[204,1255,1256],{"class":206,"line":762},[204,1257,1258],{"class":214},"    }\n",[204,1260,1261],{"class":206,"line":781},[204,1262,740],{"class":214},[204,1264,1265],{"class":206,"line":793},[204,1266,410],{"class":214},[204,1268,1269],{"class":206,"line":829},[204,1270,242],{"emptyLinePlaceholder":241},[204,1272,1273,1276,1278,1281],{"class":206,"line":861},[204,1274,1275],{"class":218},"app",[204,1277,654],{"class":214},[204,1279,1280],{"class":254},"use",[204,1282,1283],{"class":218},"(errorHandler)\n",[1285,1286,1287],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":199,"searchDepth":238,"depth":238,"links":1289},[1290,1293,1296,1297],{"id":188,"depth":238,"text":189,"children":1291},[1292],{"id":414,"depth":245,"text":415},{"id":449,"depth":238,"text":450,"children":1294},[1295],{"id":565,"depth":245,"text":566},{"id":925,"depth":238,"text":926},{"id":1020,"depth":238,"text":1021},"Handle errors with structured HTTP exception classes.","md",{},{"title":83,"description":1298},"fQBnMQFClfJCEnobrrBYgVGldsQmhoCjsx6tdQbWXhA",[1304,1306],{"title":79,"path":80,"stem":81,"description":1305,"children":-1},"Control access to routes based on conditions like authentication and roles.",{"title":27,"path":88,"stem":89,"description":1307,"children":-1},"Official MiiaJS packages for auth, databases, API docs, server adapters, and CLI.",1778575271980]