[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fmi":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fmi":1078,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fmi":1099},{"source":4,"connector":5,"page":6},"sqlite","better-sqlite3",{"path":7,"title":8,"description":9,"category":10,"tags":11,"date":14,"pinned":15,"draft":15,"body":16,"seo":1074,"stem":1075,"id":1076,"extension":1077},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fmi","Nest 中间件","","技能小册",[12,13],"nestjs","mi","2022-06-21",false,{"type":17,"value":18,"toc":1069},"minimark",[19,23,45,58,64,68,77,677,680,1002,1019,1022,1065],[20,21,8],"h1",{"id":22},"nest-中间件",[24,25,26],"blockquote",{},[27,28,29,33,34,39,40,44],"p",{},[30,31,32],"strong",{},"归档","：请优先阅读 ",[35,36,38],"a",{"href":37},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs","NestJS 导读"," 与 ",[35,41,43],{"href":42},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fbase","new\u002F 主线","。",[24,46,47,55],{},[27,48,49,50,54],{},"中间件实在路由处理程序之前调用的函数；同时可以访问请求和响应对象，以及程序请求响应周期中的",[51,52,53],"code",{},"next()","中间函数；",[27,56,57],{},"简单理解就是：前端路由守卫，做拦截处理；",[27,59,60,61],{},"常见的中间件使用方式大致为：",[51,62,63],{},"class, 函数",[65,66,67],"h2",{"id":67},"使用",[27,69,67,70,73,74],{},[51,71,72],{},"cli","命令自动生成中间件模板：",[51,75,76],{},"nest g mi logger",[78,79,83],"pre",{"className":80,"code":81,"language":82,"meta":9,"style":9},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import { Injectable, NestMiddleware } from \"@nestjs\u002Fcommon\";\nimport { NextFunction, Request, Response } from \"express\";\n\n@Injectable()\nexport class LoggerMiddleware implements NestMiddleware {\n  use(req: Request, res: Response, next: NextFunction) {\n    console.log(req.baseUrl);\n    console.log(`Request received at ${new Date()}`);\n    next();\n  }\n}\n\nexport const loggerMiddleware = (req: Request, res: Response, next: NextFunction) => {\n  console.log(req.baseUrl);\n  console.log(`Request received at ${new Date()}`);\n  next();\n};\n\n\u002F\u002F app.module.ts\nexport class AppModule implements NestModule {\n  configure(consumer: MiddlewareConsumer) {\n    \u002F\u002F class和函数中间件\n    consumer.apply(LoggerMiddleware, loggerMiddleware).forRoutes(\"\u002Fa\", \"\u002Fb\");\n  }\n}\n\n\u002F\u002F main.ts\nasync function bootstrap() {\n  const app = await NestFactory.create(AppModule);\n  await app.listen(3000);\n  \u002F\u002F 全局中间件\n  app.use(loggerMiddleware);\n}\n","ts",[51,84,85,128,161,168,181,203,246,272,309,319,325,331,336,383,405,434,444,450,455,462,479,499,505,554,559,564,569,575,591,623,646,652,672],{"__ignoreMap":9},[86,87,90,94,98,102,105,108,111,114,118,122,125],"span",{"class":88,"line":89},"line",1,[86,91,93],{"class":92},"sVHd0","import",[86,95,97],{"class":96},"sP7_E"," {",[86,99,101],{"class":100},"su5hD"," Injectable",[86,103,104],{"class":96},",",[86,106,107],{"class":100}," NestMiddleware",[86,109,110],{"class":96}," }",[86,112,113],{"class":92}," from",[86,115,117],{"class":116},"sjJ54"," \"",[86,119,121],{"class":120},"s_sjI","@nestjs\u002Fcommon",[86,123,124],{"class":116},"\"",[86,126,127],{"class":96},";\n",[86,129,131,133,135,138,140,143,145,148,150,152,154,157,159],{"class":88,"line":130},2,[86,132,93],{"class":92},[86,134,97],{"class":96},[86,136,137],{"class":100}," NextFunction",[86,139,104],{"class":96},[86,141,142],{"class":100}," Request",[86,144,104],{"class":96},[86,146,147],{"class":100}," Response",[86,149,110],{"class":96},[86,151,113],{"class":92},[86,153,117],{"class":116},[86,155,156],{"class":120},"express",[86,158,124],{"class":116},[86,160,127],{"class":96},[86,162,164],{"class":88,"line":163},3,[86,165,167],{"emptyLinePlaceholder":166},true,"\n",[86,169,171,174,178],{"class":88,"line":170},4,[86,172,173],{"class":96},"@",[86,175,177],{"class":176},"sGLFI","Injectable",[86,179,180],{"class":100},"()\n",[86,182,184,187,191,195,198,200],{"class":88,"line":183},5,[86,185,186],{"class":92},"export",[86,188,190],{"class":189},"sbsja"," class",[86,192,194],{"class":193},"sbgvK"," LoggerMiddleware",[86,196,197],{"class":189}," implements",[86,199,107],{"class":193},[86,201,202],{"class":96}," {\n",[86,204,206,210,213,217,221,223,225,228,230,232,234,237,239,241,244],{"class":88,"line":205},6,[86,207,209],{"class":208},"sVXei","  use",[86,211,212],{"class":96},"(",[86,214,216],{"class":215},"s99_P","req",[86,218,220],{"class":219},"smGrS",":",[86,222,142],{"class":193},[86,224,104],{"class":96},[86,226,227],{"class":215}," res",[86,229,220],{"class":219},[86,231,147],{"class":193},[86,233,104],{"class":96},[86,235,236],{"class":215}," next",[86,238,220],{"class":219},[86,240,137],{"class":193},[86,242,243],{"class":96},")",[86,245,202],{"class":96},[86,247,249,252,255,258,261,263,265,268,270],{"class":88,"line":248},7,[86,250,251],{"class":100},"    console",[86,253,254],{"class":96},".",[86,256,257],{"class":176},"log",[86,259,212],{"class":260},"skxfh",[86,262,216],{"class":100},[86,264,254],{"class":96},[86,266,267],{"class":100},"baseUrl",[86,269,243],{"class":260},[86,271,127],{"class":96},[86,273,275,277,279,281,283,286,289,292,295,298,302,305,307],{"class":88,"line":274},8,[86,276,251],{"class":100},[86,278,254],{"class":96},[86,280,257],{"class":176},[86,282,212],{"class":260},[86,284,285],{"class":116},"`",[86,287,288],{"class":120},"Request received at ",[86,290,291],{"class":116},"${",[86,293,294],{"class":219},"new",[86,296,297],{"class":176}," Date",[86,299,301],{"class":300},"sfo-9","()",[86,303,304],{"class":116},"}`",[86,306,243],{"class":260},[86,308,127],{"class":96},[86,310,312,315,317],{"class":88,"line":311},9,[86,313,314],{"class":176},"    next",[86,316,301],{"class":260},[86,318,127],{"class":96},[86,320,322],{"class":88,"line":321},10,[86,323,324],{"class":96},"  }\n",[86,326,328],{"class":88,"line":327},11,[86,329,330],{"class":96},"}\n",[86,332,334],{"class":88,"line":333},12,[86,335,167],{"emptyLinePlaceholder":166},[86,337,339,341,344,348,351,354,356,358,360,362,364,366,368,370,372,374,376,378,381],{"class":88,"line":338},13,[86,340,186],{"class":92},[86,342,343],{"class":189}," const",[86,345,347],{"class":346},"sfCm-"," loggerMiddleware",[86,349,350],{"class":219}," =",[86,352,353],{"class":96}," (",[86,355,216],{"class":215},[86,357,220],{"class":219},[86,359,142],{"class":193},[86,361,104],{"class":96},[86,363,227],{"class":215},[86,365,220],{"class":219},[86,367,147],{"class":193},[86,369,104],{"class":96},[86,371,236],{"class":215},[86,373,220],{"class":219},[86,375,137],{"class":193},[86,377,243],{"class":96},[86,379,380],{"class":189}," =>",[86,382,202],{"class":96},[86,384,386,389,391,393,395,397,399,401,403],{"class":88,"line":385},14,[86,387,388],{"class":100},"  console",[86,390,254],{"class":96},[86,392,257],{"class":176},[86,394,212],{"class":260},[86,396,216],{"class":100},[86,398,254],{"class":96},[86,400,267],{"class":100},[86,402,243],{"class":260},[86,404,127],{"class":96},[86,406,408,410,412,414,416,418,420,422,424,426,428,430,432],{"class":88,"line":407},15,[86,409,388],{"class":100},[86,411,254],{"class":96},[86,413,257],{"class":176},[86,415,212],{"class":260},[86,417,285],{"class":116},[86,419,288],{"class":120},[86,421,291],{"class":116},[86,423,294],{"class":219},[86,425,297],{"class":176},[86,427,301],{"class":300},[86,429,304],{"class":116},[86,431,243],{"class":260},[86,433,127],{"class":96},[86,435,437,440,442],{"class":88,"line":436},16,[86,438,439],{"class":176},"  next",[86,441,301],{"class":260},[86,443,127],{"class":96},[86,445,447],{"class":88,"line":446},17,[86,448,449],{"class":96},"};\n",[86,451,453],{"class":88,"line":452},18,[86,454,167],{"emptyLinePlaceholder":166},[86,456,458],{"class":88,"line":457},19,[86,459,461],{"class":460},"sutJx","\u002F\u002F app.module.ts\n",[86,463,465,467,469,472,474,477],{"class":88,"line":464},20,[86,466,186],{"class":92},[86,468,190],{"class":189},[86,470,471],{"class":193}," AppModule",[86,473,197],{"class":189},[86,475,476],{"class":193}," NestModule",[86,478,202],{"class":96},[86,480,482,485,487,490,492,495,497],{"class":88,"line":481},21,[86,483,484],{"class":208},"  configure",[86,486,212],{"class":96},[86,488,489],{"class":215},"consumer",[86,491,220],{"class":219},[86,493,494],{"class":193}," MiddlewareConsumer",[86,496,243],{"class":96},[86,498,202],{"class":96},[86,500,502],{"class":88,"line":501},22,[86,503,504],{"class":460},"    \u002F\u002F class和函数中间件\n",[86,506,508,511,513,516,518,521,523,525,527,529,532,534,536,539,541,543,545,548,550,552],{"class":88,"line":507},23,[86,509,510],{"class":100},"    consumer",[86,512,254],{"class":96},[86,514,515],{"class":176},"apply",[86,517,212],{"class":260},[86,519,520],{"class":100},"LoggerMiddleware",[86,522,104],{"class":96},[86,524,347],{"class":100},[86,526,243],{"class":260},[86,528,254],{"class":96},[86,530,531],{"class":176},"forRoutes",[86,533,212],{"class":260},[86,535,124],{"class":116},[86,537,538],{"class":120},"\u002Fa",[86,540,124],{"class":116},[86,542,104],{"class":96},[86,544,117],{"class":116},[86,546,547],{"class":120},"\u002Fb",[86,549,124],{"class":116},[86,551,243],{"class":260},[86,553,127],{"class":96},[86,555,557],{"class":88,"line":556},24,[86,558,324],{"class":96},[86,560,562],{"class":88,"line":561},25,[86,563,330],{"class":96},[86,565,567],{"class":88,"line":566},26,[86,568,167],{"emptyLinePlaceholder":166},[86,570,572],{"class":88,"line":571},27,[86,573,574],{"class":460},"\u002F\u002F main.ts\n",[86,576,578,581,584,587,589],{"class":88,"line":577},28,[86,579,580],{"class":189},"async",[86,582,583],{"class":189}," function",[86,585,586],{"class":176}," bootstrap",[86,588,301],{"class":96},[86,590,202],{"class":96},[86,592,594,597,601,603,606,609,611,614,616,619,621],{"class":88,"line":593},29,[86,595,596],{"class":189},"  const",[86,598,600],{"class":599},"s_hVV"," app",[86,602,350],{"class":219},[86,604,605],{"class":92}," await",[86,607,608],{"class":100}," NestFactory",[86,610,254],{"class":96},[86,612,613],{"class":176},"create",[86,615,212],{"class":260},[86,617,618],{"class":100},"AppModule",[86,620,243],{"class":260},[86,622,127],{"class":96},[86,624,626,629,631,633,636,638,642,644],{"class":88,"line":625},30,[86,627,628],{"class":92},"  await",[86,630,600],{"class":100},[86,632,254],{"class":96},[86,634,635],{"class":176},"listen",[86,637,212],{"class":260},[86,639,641],{"class":640},"srdBf","3000",[86,643,243],{"class":260},[86,645,127],{"class":96},[86,647,649],{"class":88,"line":648},31,[86,650,651],{"class":460},"  \u002F\u002F 全局中间件\n",[86,653,655,658,660,663,665,668,670],{"class":88,"line":654},32,[86,656,657],{"class":100},"  app",[86,659,254],{"class":96},[86,661,662],{"class":176},"use",[86,664,212],{"class":260},[86,666,667],{"class":100},"loggerMiddleware",[86,669,243],{"class":260},[86,671,127],{"class":96},[86,673,675],{"class":88,"line":674},33,[86,676,330],{"class":96},[65,678,679],{"id":679},"跨域案例",[78,681,683],{"className":80,"code":682,"language":82,"meta":9,"style":9},"import { Injectable, NestMiddleware } from \"@nestjs\u002Fcommon\";\n\n@Injectable()\nexport class CorsMiddleware implements NestMiddleware {\n  use(req: any, res: any, next: any) {\n    const allowedOrigin = process.env.CORS_ORIGIN ?? \"*\";\n    res.setHeader(\"Access-Control-Allow-Origin\", allowedOrigin);\n    res.setHeader(\"Access-Control-Allow-Methods\", \"GET,HEAD,PUT,PATCH,POST,DELETE\");\n    res.setHeader(\n      \"Access-Control-Allow-Headers\",\n      \"Content-Type,Authorization, Content-Length, X-Requested-With\",\n    );\n    next();\n  }\n}\n\n\u002F\u002F app.module.ts\nexport class AppModule implements NestModule {\n  configure(consumer: MiddlewareConsumer) {\n    \u002F\u002F 设置中间件\n    consumer.apply(CorsMiddleware).forRoutes(\"*\");\n  }\n}\n",[51,684,685,709,713,721,736,770,805,832,862,873,886,897,904,912,916,920,924,928,942,958,963,994,998],{"__ignoreMap":9},[86,686,687,689,691,693,695,697,699,701,703,705,707],{"class":88,"line":89},[86,688,93],{"class":92},[86,690,97],{"class":96},[86,692,101],{"class":100},[86,694,104],{"class":96},[86,696,107],{"class":100},[86,698,110],{"class":96},[86,700,113],{"class":92},[86,702,117],{"class":116},[86,704,121],{"class":120},[86,706,124],{"class":116},[86,708,127],{"class":96},[86,710,711],{"class":88,"line":130},[86,712,167],{"emptyLinePlaceholder":166},[86,714,715,717,719],{"class":88,"line":163},[86,716,173],{"class":96},[86,718,177],{"class":176},[86,720,180],{"class":100},[86,722,723,725,727,730,732,734],{"class":88,"line":170},[86,724,186],{"class":92},[86,726,190],{"class":189},[86,728,729],{"class":193}," CorsMiddleware",[86,731,197],{"class":189},[86,733,107],{"class":193},[86,735,202],{"class":96},[86,737,738,740,742,744,746,750,752,754,756,758,760,762,764,766,768],{"class":88,"line":183},[86,739,209],{"class":208},[86,741,212],{"class":96},[86,743,216],{"class":215},[86,745,220],{"class":219},[86,747,749],{"class":748},"sZMiF"," any",[86,751,104],{"class":96},[86,753,227],{"class":215},[86,755,220],{"class":219},[86,757,749],{"class":748},[86,759,104],{"class":96},[86,761,236],{"class":215},[86,763,220],{"class":219},[86,765,749],{"class":748},[86,767,243],{"class":96},[86,769,202],{"class":96},[86,771,772,775,778,780,783,785,788,790,793,796,798,801,803],{"class":88,"line":205},[86,773,774],{"class":189},"    const",[86,776,777],{"class":599}," allowedOrigin",[86,779,350],{"class":219},[86,781,782],{"class":100}," process",[86,784,254],{"class":96},[86,786,787],{"class":100},"env",[86,789,254],{"class":96},[86,791,792],{"class":599},"CORS_ORIGIN",[86,794,795],{"class":219}," ??",[86,797,117],{"class":116},[86,799,800],{"class":120},"*",[86,802,124],{"class":116},[86,804,127],{"class":96},[86,806,807,810,812,815,817,819,822,824,826,828,830],{"class":88,"line":248},[86,808,809],{"class":100},"    res",[86,811,254],{"class":96},[86,813,814],{"class":176},"setHeader",[86,816,212],{"class":260},[86,818,124],{"class":116},[86,820,821],{"class":120},"Access-Control-Allow-Origin",[86,823,124],{"class":116},[86,825,104],{"class":96},[86,827,777],{"class":100},[86,829,243],{"class":260},[86,831,127],{"class":96},[86,833,834,836,838,840,842,844,847,849,851,853,856,858,860],{"class":88,"line":274},[86,835,809],{"class":100},[86,837,254],{"class":96},[86,839,814],{"class":176},[86,841,212],{"class":260},[86,843,124],{"class":116},[86,845,846],{"class":120},"Access-Control-Allow-Methods",[86,848,124],{"class":116},[86,850,104],{"class":96},[86,852,117],{"class":116},[86,854,855],{"class":120},"GET,HEAD,PUT,PATCH,POST,DELETE",[86,857,124],{"class":116},[86,859,243],{"class":260},[86,861,127],{"class":96},[86,863,864,866,868,870],{"class":88,"line":311},[86,865,809],{"class":100},[86,867,254],{"class":96},[86,869,814],{"class":176},[86,871,872],{"class":260},"(\n",[86,874,875,878,881,883],{"class":88,"line":321},[86,876,877],{"class":116},"      \"",[86,879,880],{"class":120},"Access-Control-Allow-Headers",[86,882,124],{"class":116},[86,884,885],{"class":96},",\n",[86,887,888,890,893,895],{"class":88,"line":327},[86,889,877],{"class":116},[86,891,892],{"class":120},"Content-Type,Authorization, Content-Length, X-Requested-With",[86,894,124],{"class":116},[86,896,885],{"class":96},[86,898,899,902],{"class":88,"line":333},[86,900,901],{"class":260},"    )",[86,903,127],{"class":96},[86,905,906,908,910],{"class":88,"line":338},[86,907,314],{"class":176},[86,909,301],{"class":260},[86,911,127],{"class":96},[86,913,914],{"class":88,"line":385},[86,915,324],{"class":96},[86,917,918],{"class":88,"line":407},[86,919,330],{"class":96},[86,921,922],{"class":88,"line":436},[86,923,167],{"emptyLinePlaceholder":166},[86,925,926],{"class":88,"line":446},[86,927,461],{"class":460},[86,929,930,932,934,936,938,940],{"class":88,"line":452},[86,931,186],{"class":92},[86,933,190],{"class":189},[86,935,471],{"class":193},[86,937,197],{"class":189},[86,939,476],{"class":193},[86,941,202],{"class":96},[86,943,944,946,948,950,952,954,956],{"class":88,"line":457},[86,945,484],{"class":208},[86,947,212],{"class":96},[86,949,489],{"class":215},[86,951,220],{"class":219},[86,953,494],{"class":193},[86,955,243],{"class":96},[86,957,202],{"class":96},[86,959,960],{"class":88,"line":464},[86,961,962],{"class":460},"    \u002F\u002F 设置中间件\n",[86,964,965,967,969,971,973,976,978,980,982,984,986,988,990,992],{"class":88,"line":481},[86,966,510],{"class":100},[86,968,254],{"class":96},[86,970,515],{"class":176},[86,972,212],{"class":260},[86,974,975],{"class":100},"CorsMiddleware",[86,977,243],{"class":260},[86,979,254],{"class":96},[86,981,531],{"class":176},[86,983,212],{"class":260},[86,985,124],{"class":116},[86,987,800],{"class":120},[86,989,124],{"class":116},[86,991,243],{"class":260},[86,993,127],{"class":96},[86,995,996],{"class":88,"line":501},[86,997,324],{"class":96},[86,999,1000],{"class":88,"line":507},[86,1001,330],{"class":96},[27,1003,1004,1005,1008,1009,1012,1013,44],{},"生产环境更常用 ",[51,1006,1007],{},"app.enableCors({ origin: allowedOrigins })","（在 ",[51,1010,1011],{},"main.ts","），见 ",[35,1014,1018],{"href":1015,"rel":1016},"https:\u002F\u002Fdocs.nestjs.com\u002Fsecurity\u002Fcors",[1017],"nofollow","NestJS CORS",[65,1020,1021],{"id":1021},"参考文献",[1023,1024,1025,1038],"table",{},[1026,1027,1028],"thead",{},[1029,1030,1031,1035],"tr",{},[1032,1033,1034],"th",{},"资料",[1032,1036,1037],{},"说明",[1039,1040,1041,1054],"tbody",{},[1029,1042,1043,1051],{},[1044,1045,1046],"td",{},[35,1047,1050],{"href":1048,"rel":1049},"https:\u002F\u002Fdocs.nestjs.com\u002Fmiddleware",[1017],"Middleware",[1044,1052,1053],{},"官方",[1029,1055,1056,1062],{},[1044,1057,1058],{},[35,1059,1061],{"href":1060},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fmiddleware","new\u002Fmiddleware",[1044,1063,1064],{},"主线教程",[1066,1067,1068],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVXei, html code.shiki .sVXei{--shiki-light:#E53935;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sfo-9, html code.shiki .sfo-9{--shiki-light:#90A4AE;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sfCm-, html code.shiki .sfCm-{--shiki-light:#90A4AE;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--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 .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":9,"searchDepth":130,"depth":130,"links":1070},[1071,1072,1073],{"id":67,"depth":130,"text":67},{"id":679,"depth":130,"text":679},{"id":1021,"depth":130,"text":1021},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fend\u002FNestJS\u002Fbefore\u002Fmi","knowledge\u002Fknowledge\u002Fbooklet\u002Fend\u002FNestJS\u002Fbefore\u002Fmi.md","md",{"items":1079},[1080,1083,1086,1089,1093,1096],{"path":1081,"title":1082,"description":9,"category":10,"score":205},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fexce","异常处理器",{"path":1084,"title":1085,"description":9,"category":10,"score":205},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fenv","环境加载",{"path":1087,"title":1088,"description":9,"category":10,"score":205},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fdatabase","数据库的配置",{"path":1090,"title":1091,"description":1092,"category":10,"score":205},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finfo","归档说明（before\u002F）","本目录（before\u002F）为早期 NestJS 实战笔记：以完整业务片段（守卫、拦截器、MongoDB、JWT 等）为主，写法与文件命名不统一。新项目请跟 new\u002F 主线，技术细节以 docs.nestjs.com 为准。",{"path":1094,"title":1095,"description":9,"category":10,"score":205},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fitc","统一响应格式拦截器",{"path":1097,"title":1098,"description":9,"category":10,"score":205},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fnext","路由守卫",{"series":1100,"title":1101,"items":1102,"index":274,"prev":1132,"next":1133},"booklet\u002Fend\u002Fnestjs\u002Fbefore","before",[1103,1105,1109,1111,1113,1115,1119,1121,1125,1126,1128],{"path":1087,"title":1088,"date":1104,"pinned":15},"2024-06-22",{"path":1106,"title":1107,"date":1108,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fdemo","入手Demo","2022-10-15",{"path":1084,"title":1085,"date":1110,"pinned":15},"2024-09-01",{"path":1081,"title":1082,"date":1112,"pinned":15},"2026-03-17",{"path":1090,"title":1091,"date":1114,"pinned":15},"2023-08-31",{"path":1116,"title":1117,"date":1118,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finjectable","操作日志拦截器","2020-02-20",{"path":1094,"title":1095,"date":1120,"pinned":15},"2023-08-17",{"path":1122,"title":1123,"date":1124,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fjwt","JWT 与 Passport 授权","2021-08-10",{"path":7,"title":8,"date":14,"pinned":15},{"path":1097,"title":1098,"date":1127,"pinned":15},"2022-12-01",{"path":1129,"title":1130,"date":1131,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fother","其他配置","2022-05-23",{"path":1122,"title":1123,"date":1124,"pinned":15},{"path":1097,"title":1098,"date":1127,"pinned":15}]