[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fitc":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fitc":1977,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fitc":1998},{"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":1973,"stem":1974,"id":1975,"extension":1976},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fitc","统一响应格式拦截器","","技能小册",[12,13],"nestjs","itc","2023-08-17",false,{"type":17,"value":18,"toc":1965},"minimark",[19,22,49,52,56,68,1292,1599,1601,1606,1610,1619,1690,1697,1724,1727,1734,1913,1916,1961],[20,21,8],"h1",{"id":8},[23,24,25],"blockquote",{},[26,27,28,32,33,38,39,43,44,48],"p",{},[29,30,31],"strong",{},"归档","：请优先阅读 ",[34,35,37],"a",{"href":36},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs","NestJS 导读","、",[34,40,42],{"href":41},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fintercept","new\u002Fintercept","。操作日志拦截见 ",[34,45,47],{"href":46},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finjectable","Injectable","。",[26,50,51],{},"在日常开发中，我们经常会碰见后端接口返回的信息数据，会发现不管请求成功还是失败返回的数据格式都是一样的，这个是如何做到的呢？",[53,54,55],"h2",{"id":55},"编写",[26,57,58,59,63,64,67],{},"使用",[60,61,62],"code",{},"nest","命令",[60,65,66],{},"nest g itc interceptor",",这个时候会生成一个文件，我们只需要在这个文件编写即可；",[69,70,74],"pre",{"className":71,"code":72,"language":73,"meta":9,"style":9},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import {\n  CallHandler,\n  ExecutionContext,\n  HttpException,\n  HttpStatus,\n  Injectable,\n  Logger,\n  NestInterceptor,\n} from \"@nestjs\u002Fcommon\";\nimport * as kleur from \"kleur\";\nimport { catchError, map, Observable, tap, throwError } from \"rxjs\";\nimport { getMessage } from \"..\u002Futils\u002Finterceptor.utils\";\n\n@Injectable()\nexport class InterceptorInterceptor implements NestInterceptor {\n  intercept(context: ExecutionContext, next: CallHandler): Observable\u003Cany> {\n    const now = Date.now();\n    const request = context.switchToHttp().getRequest();\n    const logOptions = {\n      url: request.url,\n      method: request.method,\n      params: request.params,\n      query: request.query,\n      body: request.body,\n      ip: request.ip,\n    };\n    \u002F\u002F 请求时将请求的一些基础信息打印在终端\n    Logger.debug(\n      `${kleur.yellow(\"[API-LOG]\")} ${kleur.blue(\n        JSON.stringify(logOptions),\n      )} ${kleur.yellow(\" +\" + (Date.now() - now) + \"ms\")}`,\n    );\n    return next.handle().pipe(\n      catchError((error) => {\n        \u002F\u002F 异常处理，异常大致分为俩种，\n        \u002F\u002F 一种是服务异常，比如你服务代码编写错误\n        \u002F\u002F 二是请求异常，比如404等\n        \u002F\u002F 返回的请求状态码也是不一样的，404，200，500等\n        \u002F\u002F http请求\n        if (error instanceof HttpException) {\n          let msg = error.message;\n          const getMsg = (error.getResponse() as any).message || error.message;\n          if (Array.isArray(getMsg)) {\n            msg = getMsg[0];\n          } else {\n            msg = getMsg;\n          }\n          return throwError(\n            () =>\n              new HttpException(\n                getMessage({\n                  context: null,\n                  message: msg,\n                  status: error.getStatus(),\n                }),\n                HttpStatus.OK,\n              ),\n          );\n        }\n        \u002F\u002F 服务起内部错误\n        return throwError(\n          () =>\n            new HttpException(\n              getMessage({\n                context: null,\n                message: error.message,\n                status: HttpStatus.INTERNAL_SERVER_ERROR,\n              }),\n              HttpStatus.INTERNAL_SERVER_ERROR,\n            ),\n        );\n      }),\n      map((data) => {\n        \u002F\u002F 没有异常拦截，那么正常返回\n        return getMessage({\n          context: data,\n          message: \"操作成功\",\n        });\n      }),\n    );\n  }\n}\n","ts",[60,75,76,89,99,107,115,123,131,139,147,170,197,243,266,273,285,307,357,385,414,426,443,460,477,494,511,528,534,541,555,594,614,679,687,709,729,735,741,747,753,759,780,801,846,872,894,905,916,922,932,941,951,961,974,986,1005,1015,1028,1036,1044,1050,1056,1066,1074,1084,1094,1106,1122,1140,1150,1162,1170,1178,1188,1207,1213,1224,1237,1254,1264,1273,1280,1286],{"__ignoreMap":9},[77,78,81,85],"span",{"class":79,"line":80},"line",1,[77,82,84],{"class":83},"sVHd0","import",[77,86,88],{"class":87},"sP7_E"," {\n",[77,90,92,96],{"class":79,"line":91},2,[77,93,95],{"class":94},"su5hD","  CallHandler",[77,97,98],{"class":87},",\n",[77,100,102,105],{"class":79,"line":101},3,[77,103,104],{"class":94},"  ExecutionContext",[77,106,98],{"class":87},[77,108,110,113],{"class":79,"line":109},4,[77,111,112],{"class":94},"  HttpException",[77,114,98],{"class":87},[77,116,118,121],{"class":79,"line":117},5,[77,119,120],{"class":94},"  HttpStatus",[77,122,98],{"class":87},[77,124,126,129],{"class":79,"line":125},6,[77,127,128],{"class":94},"  Injectable",[77,130,98],{"class":87},[77,132,134,137],{"class":79,"line":133},7,[77,135,136],{"class":94},"  Logger",[77,138,98],{"class":87},[77,140,142,145],{"class":79,"line":141},8,[77,143,144],{"class":94},"  NestInterceptor",[77,146,98],{"class":87},[77,148,150,153,156,160,164,167],{"class":79,"line":149},9,[77,151,152],{"class":87},"}",[77,154,155],{"class":83}," from",[77,157,159],{"class":158},"sjJ54"," \"",[77,161,163],{"class":162},"s_sjI","@nestjs\u002Fcommon",[77,165,166],{"class":158},"\"",[77,168,169],{"class":87},";\n",[77,171,173,175,179,182,185,188,190,193,195],{"class":79,"line":172},10,[77,174,84],{"class":83},[77,176,178],{"class":177},"s39Yj"," *",[77,180,181],{"class":83}," as",[77,183,184],{"class":94}," kleur ",[77,186,187],{"class":83},"from",[77,189,159],{"class":158},[77,191,192],{"class":162},"kleur",[77,194,166],{"class":158},[77,196,169],{"class":87},[77,198,200,202,205,208,211,214,216,219,221,224,226,229,232,234,236,239,241],{"class":79,"line":199},11,[77,201,84],{"class":83},[77,203,204],{"class":87}," {",[77,206,207],{"class":94}," catchError",[77,209,210],{"class":87},",",[77,212,213],{"class":94}," map",[77,215,210],{"class":87},[77,217,218],{"class":94}," Observable",[77,220,210],{"class":87},[77,222,223],{"class":94}," tap",[77,225,210],{"class":87},[77,227,228],{"class":94}," throwError",[77,230,231],{"class":87}," }",[77,233,155],{"class":83},[77,235,159],{"class":158},[77,237,238],{"class":162},"rxjs",[77,240,166],{"class":158},[77,242,169],{"class":87},[77,244,246,248,250,253,255,257,259,262,264],{"class":79,"line":245},12,[77,247,84],{"class":83},[77,249,204],{"class":87},[77,251,252],{"class":94}," getMessage",[77,254,231],{"class":87},[77,256,155],{"class":83},[77,258,159],{"class":158},[77,260,261],{"class":162},"..\u002Futils\u002Finterceptor.utils",[77,263,166],{"class":158},[77,265,169],{"class":87},[77,267,269],{"class":79,"line":268},13,[77,270,272],{"emptyLinePlaceholder":271},true,"\n",[77,274,276,279,282],{"class":79,"line":275},14,[77,277,278],{"class":87},"@",[77,280,47],{"class":281},"sGLFI",[77,283,284],{"class":94},"()\n",[77,286,288,291,295,299,302,305],{"class":79,"line":287},15,[77,289,290],{"class":83},"export",[77,292,294],{"class":293},"sbsja"," class",[77,296,298],{"class":297},"sbgvK"," InterceptorInterceptor",[77,300,301],{"class":293}," implements",[77,303,304],{"class":297}," NestInterceptor",[77,306,88],{"class":87},[77,308,310,314,317,321,325,328,330,333,335,338,341,343,345,348,352,355],{"class":79,"line":309},16,[77,311,313],{"class":312},"sVXei","  intercept",[77,315,316],{"class":87},"(",[77,318,320],{"class":319},"s99_P","context",[77,322,324],{"class":323},"smGrS",":",[77,326,327],{"class":297}," ExecutionContext",[77,329,210],{"class":87},[77,331,332],{"class":319}," next",[77,334,324],{"class":323},[77,336,337],{"class":297}," CallHandler",[77,339,340],{"class":87},")",[77,342,324],{"class":323},[77,344,218],{"class":297},[77,346,347],{"class":87},"\u003C",[77,349,351],{"class":350},"sZMiF","any",[77,353,354],{"class":87},">",[77,356,88],{"class":87},[77,358,360,363,367,370,373,376,379,383],{"class":79,"line":359},17,[77,361,362],{"class":293},"    const",[77,364,366],{"class":365},"s_hVV"," now",[77,368,369],{"class":323}," =",[77,371,372],{"class":94}," Date",[77,374,375],{"class":87},".",[77,377,378],{"class":281},"now",[77,380,382],{"class":381},"skxfh","()",[77,384,169],{"class":87},[77,386,388,390,393,395,398,400,403,405,407,410,412],{"class":79,"line":387},18,[77,389,362],{"class":293},[77,391,392],{"class":365}," request",[77,394,369],{"class":323},[77,396,397],{"class":94}," context",[77,399,375],{"class":87},[77,401,402],{"class":281},"switchToHttp",[77,404,382],{"class":381},[77,406,375],{"class":87},[77,408,409],{"class":281},"getRequest",[77,411,382],{"class":381},[77,413,169],{"class":87},[77,415,417,419,422,424],{"class":79,"line":416},19,[77,418,362],{"class":293},[77,420,421],{"class":365}," logOptions",[77,423,369],{"class":323},[77,425,88],{"class":87},[77,427,429,432,434,436,438,441],{"class":79,"line":428},20,[77,430,431],{"class":381},"      url",[77,433,324],{"class":87},[77,435,392],{"class":94},[77,437,375],{"class":87},[77,439,440],{"class":94},"url",[77,442,98],{"class":87},[77,444,446,449,451,453,455,458],{"class":79,"line":445},21,[77,447,448],{"class":381},"      method",[77,450,324],{"class":87},[77,452,392],{"class":94},[77,454,375],{"class":87},[77,456,457],{"class":94},"method",[77,459,98],{"class":87},[77,461,463,466,468,470,472,475],{"class":79,"line":462},22,[77,464,465],{"class":381},"      params",[77,467,324],{"class":87},[77,469,392],{"class":94},[77,471,375],{"class":87},[77,473,474],{"class":94},"params",[77,476,98],{"class":87},[77,478,480,483,485,487,489,492],{"class":79,"line":479},23,[77,481,482],{"class":381},"      query",[77,484,324],{"class":87},[77,486,392],{"class":94},[77,488,375],{"class":87},[77,490,491],{"class":94},"query",[77,493,98],{"class":87},[77,495,497,500,502,504,506,509],{"class":79,"line":496},24,[77,498,499],{"class":381},"      body",[77,501,324],{"class":87},[77,503,392],{"class":94},[77,505,375],{"class":87},[77,507,508],{"class":94},"body",[77,510,98],{"class":87},[77,512,514,517,519,521,523,526],{"class":79,"line":513},25,[77,515,516],{"class":381},"      ip",[77,518,324],{"class":87},[77,520,392],{"class":94},[77,522,375],{"class":87},[77,524,525],{"class":94},"ip",[77,527,98],{"class":87},[77,529,531],{"class":79,"line":530},26,[77,532,533],{"class":87},"    };\n",[77,535,537],{"class":79,"line":536},27,[77,538,540],{"class":539},"sutJx","    \u002F\u002F 请求时将请求的一些基础信息打印在终端\n",[77,542,544,547,549,552],{"class":79,"line":543},28,[77,545,546],{"class":94},"    Logger",[77,548,375],{"class":87},[77,550,551],{"class":281},"debug",[77,553,554],{"class":381},"(\n",[77,556,558,561,563,565,568,571,573,576,578,580,582,585,587,589,592],{"class":79,"line":557},29,[77,559,560],{"class":158},"      `${",[77,562,192],{"class":94},[77,564,375],{"class":158},[77,566,567],{"class":281},"yellow",[77,569,316],{"class":570},"sfo-9",[77,572,166],{"class":158},[77,574,575],{"class":162},"[API-LOG]",[77,577,166],{"class":158},[77,579,340],{"class":570},[77,581,152],{"class":158},[77,583,584],{"class":158}," ${",[77,586,192],{"class":94},[77,588,375],{"class":158},[77,590,591],{"class":281},"blue",[77,593,554],{"class":570},[77,595,597,600,602,605,607,610,612],{"class":79,"line":596},30,[77,598,599],{"class":365},"        JSON",[77,601,375],{"class":158},[77,603,604],{"class":281},"stringify",[77,606,316],{"class":570},[77,608,609],{"class":94},"logOptions",[77,611,340],{"class":570},[77,613,98],{"class":158},[77,615,617,620,622,624,626,628,630,632,634,637,639,641,644,647,649,651,654,657,659,662,665,667,670,672,674,677],{"class":79,"line":616},31,[77,618,619],{"class":570},"      )",[77,621,152],{"class":158},[77,623,584],{"class":158},[77,625,192],{"class":94},[77,627,375],{"class":158},[77,629,567],{"class":281},[77,631,316],{"class":570},[77,633,166],{"class":158},[77,635,636],{"class":162}," +",[77,638,166],{"class":158},[77,640,636],{"class":323},[77,642,643],{"class":570}," (",[77,645,646],{"class":94},"Date",[77,648,375],{"class":158},[77,650,378],{"class":281},[77,652,653],{"class":570},"() ",[77,655,656],{"class":323},"-",[77,658,366],{"class":94},[77,660,661],{"class":570},") ",[77,663,664],{"class":323},"+",[77,666,159],{"class":158},[77,668,669],{"class":162},"ms",[77,671,166],{"class":158},[77,673,340],{"class":570},[77,675,676],{"class":158},"}`",[77,678,98],{"class":87},[77,680,682,685],{"class":79,"line":681},32,[77,683,684],{"class":381},"    )",[77,686,169],{"class":87},[77,688,690,693,695,697,700,702,704,707],{"class":79,"line":689},33,[77,691,692],{"class":83},"    return",[77,694,332],{"class":94},[77,696,375],{"class":87},[77,698,699],{"class":281},"handle",[77,701,382],{"class":381},[77,703,375],{"class":87},[77,705,706],{"class":281},"pipe",[77,708,554],{"class":381},[77,710,712,715,717,719,722,724,727],{"class":79,"line":711},34,[77,713,714],{"class":281},"      catchError",[77,716,316],{"class":381},[77,718,316],{"class":87},[77,720,721],{"class":319},"error",[77,723,340],{"class":87},[77,725,726],{"class":293}," =>",[77,728,88],{"class":87},[77,730,732],{"class":79,"line":731},35,[77,733,734],{"class":539},"        \u002F\u002F 异常处理，异常大致分为俩种，\n",[77,736,738],{"class":79,"line":737},36,[77,739,740],{"class":539},"        \u002F\u002F 一种是服务异常，比如你服务代码编写错误\n",[77,742,744],{"class":79,"line":743},37,[77,745,746],{"class":539},"        \u002F\u002F 二是请求异常，比如404等\n",[77,748,750],{"class":79,"line":749},38,[77,751,752],{"class":539},"        \u002F\u002F 返回的请求状态码也是不一样的，404，200，500等\n",[77,754,756],{"class":79,"line":755},39,[77,757,758],{"class":539},"        \u002F\u002F http请求\n",[77,760,762,765,767,769,772,775,777],{"class":79,"line":761},40,[77,763,764],{"class":83},"        if",[77,766,643],{"class":381},[77,768,721],{"class":94},[77,770,771],{"class":323}," instanceof",[77,773,774],{"class":297}," HttpException",[77,776,661],{"class":381},[77,778,779],{"class":87},"{\n",[77,781,783,786,789,791,794,796,799],{"class":79,"line":782},41,[77,784,785],{"class":293},"          let",[77,787,788],{"class":94}," msg",[77,790,369],{"class":323},[77,792,793],{"class":94}," error",[77,795,375],{"class":87},[77,797,798],{"class":94},"message",[77,800,169],{"class":87},[77,802,804,807,810,812,814,816,818,821,823,826,829,831,833,835,838,840,842,844],{"class":79,"line":803},42,[77,805,806],{"class":293},"          const",[77,808,809],{"class":365}," getMsg",[77,811,369],{"class":323},[77,813,643],{"class":381},[77,815,721],{"class":94},[77,817,375],{"class":87},[77,819,820],{"class":281},"getResponse",[77,822,653],{"class":381},[77,824,825],{"class":83},"as",[77,827,828],{"class":350}," any",[77,830,340],{"class":381},[77,832,375],{"class":87},[77,834,798],{"class":94},[77,836,837],{"class":323}," ||",[77,839,793],{"class":94},[77,841,375],{"class":87},[77,843,798],{"class":94},[77,845,169],{"class":87},[77,847,849,852,854,857,859,862,864,867,870],{"class":79,"line":848},43,[77,850,851],{"class":83},"          if",[77,853,643],{"class":381},[77,855,856],{"class":94},"Array",[77,858,375],{"class":87},[77,860,861],{"class":281},"isArray",[77,863,316],{"class":381},[77,865,866],{"class":94},"getMsg",[77,868,869],{"class":381},")) ",[77,871,779],{"class":87},[77,873,875,878,880,882,885,889,892],{"class":79,"line":874},44,[77,876,877],{"class":94},"            msg",[77,879,369],{"class":323},[77,881,809],{"class":94},[77,883,884],{"class":381},"[",[77,886,888],{"class":887},"srdBf","0",[77,890,891],{"class":381},"]",[77,893,169],{"class":87},[77,895,897,900,903],{"class":79,"line":896},45,[77,898,899],{"class":87},"          }",[77,901,902],{"class":83}," else",[77,904,88],{"class":87},[77,906,908,910,912,914],{"class":79,"line":907},46,[77,909,877],{"class":94},[77,911,369],{"class":323},[77,913,809],{"class":94},[77,915,169],{"class":87},[77,917,919],{"class":79,"line":918},47,[77,920,921],{"class":87},"          }\n",[77,923,925,928,930],{"class":79,"line":924},48,[77,926,927],{"class":83},"          return",[77,929,228],{"class":281},[77,931,554],{"class":381},[77,933,935,938],{"class":79,"line":934},49,[77,936,937],{"class":87},"            ()",[77,939,940],{"class":293}," =>\n",[77,942,944,947,949],{"class":79,"line":943},50,[77,945,946],{"class":323},"              new",[77,948,774],{"class":281},[77,950,554],{"class":381},[77,952,954,957,959],{"class":79,"line":953},51,[77,955,956],{"class":281},"                getMessage",[77,958,316],{"class":381},[77,960,779],{"class":87},[77,962,964,967,969,972],{"class":79,"line":963},52,[77,965,966],{"class":381},"                  context",[77,968,324],{"class":87},[77,970,971],{"class":177}," null",[77,973,98],{"class":87},[77,975,977,980,982,984],{"class":79,"line":976},53,[77,978,979],{"class":381},"                  message",[77,981,324],{"class":87},[77,983,788],{"class":94},[77,985,98],{"class":87},[77,987,989,992,994,996,998,1001,1003],{"class":79,"line":988},54,[77,990,991],{"class":381},"                  status",[77,993,324],{"class":87},[77,995,793],{"class":94},[77,997,375],{"class":87},[77,999,1000],{"class":281},"getStatus",[77,1002,382],{"class":381},[77,1004,98],{"class":87},[77,1006,1008,1011,1013],{"class":79,"line":1007},55,[77,1009,1010],{"class":87},"                }",[77,1012,340],{"class":381},[77,1014,98],{"class":87},[77,1016,1018,1021,1023,1026],{"class":79,"line":1017},56,[77,1019,1020],{"class":94},"                HttpStatus",[77,1022,375],{"class":87},[77,1024,1025],{"class":365},"OK",[77,1027,98],{"class":87},[77,1029,1031,1034],{"class":79,"line":1030},57,[77,1032,1033],{"class":381},"              )",[77,1035,98],{"class":87},[77,1037,1039,1042],{"class":79,"line":1038},58,[77,1040,1041],{"class":381},"          )",[77,1043,169],{"class":87},[77,1045,1047],{"class":79,"line":1046},59,[77,1048,1049],{"class":87},"        }\n",[77,1051,1053],{"class":79,"line":1052},60,[77,1054,1055],{"class":539},"        \u002F\u002F 服务起内部错误\n",[77,1057,1059,1062,1064],{"class":79,"line":1058},61,[77,1060,1061],{"class":83},"        return",[77,1063,228],{"class":281},[77,1065,554],{"class":381},[77,1067,1069,1072],{"class":79,"line":1068},62,[77,1070,1071],{"class":87},"          ()",[77,1073,940],{"class":293},[77,1075,1077,1080,1082],{"class":79,"line":1076},63,[77,1078,1079],{"class":323},"            new",[77,1081,774],{"class":281},[77,1083,554],{"class":381},[77,1085,1087,1090,1092],{"class":79,"line":1086},64,[77,1088,1089],{"class":281},"              getMessage",[77,1091,316],{"class":381},[77,1093,779],{"class":87},[77,1095,1097,1100,1102,1104],{"class":79,"line":1096},65,[77,1098,1099],{"class":381},"                context",[77,1101,324],{"class":87},[77,1103,971],{"class":177},[77,1105,98],{"class":87},[77,1107,1109,1112,1114,1116,1118,1120],{"class":79,"line":1108},66,[77,1110,1111],{"class":381},"                message",[77,1113,324],{"class":87},[77,1115,793],{"class":94},[77,1117,375],{"class":87},[77,1119,798],{"class":94},[77,1121,98],{"class":87},[77,1123,1125,1128,1130,1133,1135,1138],{"class":79,"line":1124},67,[77,1126,1127],{"class":381},"                status",[77,1129,324],{"class":87},[77,1131,1132],{"class":94}," HttpStatus",[77,1134,375],{"class":87},[77,1136,1137],{"class":365},"INTERNAL_SERVER_ERROR",[77,1139,98],{"class":87},[77,1141,1143,1146,1148],{"class":79,"line":1142},68,[77,1144,1145],{"class":87},"              }",[77,1147,340],{"class":381},[77,1149,98],{"class":87},[77,1151,1153,1156,1158,1160],{"class":79,"line":1152},69,[77,1154,1155],{"class":94},"              HttpStatus",[77,1157,375],{"class":87},[77,1159,1137],{"class":365},[77,1161,98],{"class":87},[77,1163,1165,1168],{"class":79,"line":1164},70,[77,1166,1167],{"class":381},"            )",[77,1169,98],{"class":87},[77,1171,1173,1176],{"class":79,"line":1172},71,[77,1174,1175],{"class":381},"        )",[77,1177,169],{"class":87},[77,1179,1181,1184,1186],{"class":79,"line":1180},72,[77,1182,1183],{"class":87},"      }",[77,1185,340],{"class":381},[77,1187,98],{"class":87},[77,1189,1191,1194,1196,1198,1201,1203,1205],{"class":79,"line":1190},73,[77,1192,1193],{"class":281},"      map",[77,1195,316],{"class":381},[77,1197,316],{"class":87},[77,1199,1200],{"class":319},"data",[77,1202,340],{"class":87},[77,1204,726],{"class":293},[77,1206,88],{"class":87},[77,1208,1210],{"class":79,"line":1209},74,[77,1211,1212],{"class":539},"        \u002F\u002F 没有异常拦截，那么正常返回\n",[77,1214,1216,1218,1220,1222],{"class":79,"line":1215},75,[77,1217,1061],{"class":83},[77,1219,252],{"class":281},[77,1221,316],{"class":381},[77,1223,779],{"class":87},[77,1225,1227,1230,1232,1235],{"class":79,"line":1226},76,[77,1228,1229],{"class":381},"          context",[77,1231,324],{"class":87},[77,1233,1234],{"class":94}," data",[77,1236,98],{"class":87},[77,1238,1240,1243,1245,1247,1250,1252],{"class":79,"line":1239},77,[77,1241,1242],{"class":381},"          message",[77,1244,324],{"class":87},[77,1246,159],{"class":158},[77,1248,1249],{"class":162},"操作成功",[77,1251,166],{"class":158},[77,1253,98],{"class":87},[77,1255,1257,1260,1262],{"class":79,"line":1256},78,[77,1258,1259],{"class":87},"        }",[77,1261,340],{"class":381},[77,1263,169],{"class":87},[77,1265,1267,1269,1271],{"class":79,"line":1266},79,[77,1268,1183],{"class":87},[77,1270,340],{"class":381},[77,1272,98],{"class":87},[77,1274,1276,1278],{"class":79,"line":1275},80,[77,1277,684],{"class":381},[77,1279,169],{"class":87},[77,1281,1283],{"class":79,"line":1282},81,[77,1284,1285],{"class":87},"  }\n",[77,1287,1289],{"class":79,"line":1288},82,[77,1290,1291],{"class":87},"}\n",[69,1293,1295],{"className":71,"code":1294,"language":73,"meta":9,"style":9},"import { Logger } from \"@nestjs\u002Fcommon\";\nimport * as kleur from \"kleur\";\n\ninterface IMessage {\n  message: string;\n  context: object;\n  status?: number;\n  timestamp?: string;\n}\nexport function getMessage(options: IMessage) {\n  options.status !== 200 &&\n    Logger.debug(`${kleur.yellow(\"[API-LOG]\")} ${kleur.red(options.message)} `);\n  \u002F\u002F 正常返回的接口信息\n  return {\n    message: options.message,\n    status: options.status || 200,\n    timestamp: new Date().toISOString(),\n    context: options.context,\n  };\n}\n",[60,1296,1297,1318,1338,1342,1352,1365,1377,1390,1401,1405,1427,1446,1505,1510,1517,1533,1552,1575,1590,1595],{"__ignoreMap":9},[77,1298,1299,1301,1303,1306,1308,1310,1312,1314,1316],{"class":79,"line":80},[77,1300,84],{"class":83},[77,1302,204],{"class":87},[77,1304,1305],{"class":94}," Logger",[77,1307,231],{"class":87},[77,1309,155],{"class":83},[77,1311,159],{"class":158},[77,1313,163],{"class":162},[77,1315,166],{"class":158},[77,1317,169],{"class":87},[77,1319,1320,1322,1324,1326,1328,1330,1332,1334,1336],{"class":79,"line":91},[77,1321,84],{"class":83},[77,1323,178],{"class":177},[77,1325,181],{"class":83},[77,1327,184],{"class":94},[77,1329,187],{"class":83},[77,1331,159],{"class":158},[77,1333,192],{"class":162},[77,1335,166],{"class":158},[77,1337,169],{"class":87},[77,1339,1340],{"class":79,"line":101},[77,1341,272],{"emptyLinePlaceholder":271},[77,1343,1344,1347,1350],{"class":79,"line":109},[77,1345,1346],{"class":293},"interface",[77,1348,1349],{"class":297}," IMessage",[77,1351,88],{"class":87},[77,1353,1354,1358,1360,1363],{"class":79,"line":117},[77,1355,1357],{"class":1356},"sucvu","  message",[77,1359,324],{"class":323},[77,1361,1362],{"class":350}," string",[77,1364,169],{"class":87},[77,1366,1367,1370,1372,1375],{"class":79,"line":125},[77,1368,1369],{"class":1356},"  context",[77,1371,324],{"class":323},[77,1373,1374],{"class":350}," object",[77,1376,169],{"class":87},[77,1378,1379,1382,1385,1388],{"class":79,"line":133},[77,1380,1381],{"class":1356},"  status",[77,1383,1384],{"class":323},"?:",[77,1386,1387],{"class":350}," number",[77,1389,169],{"class":87},[77,1391,1392,1395,1397,1399],{"class":79,"line":141},[77,1393,1394],{"class":1356},"  timestamp",[77,1396,1384],{"class":323},[77,1398,1362],{"class":350},[77,1400,169],{"class":87},[77,1402,1403],{"class":79,"line":149},[77,1404,1291],{"class":87},[77,1406,1407,1409,1412,1414,1416,1419,1421,1423,1425],{"class":79,"line":172},[77,1408,290],{"class":83},[77,1410,1411],{"class":293}," function",[77,1413,252],{"class":281},[77,1415,316],{"class":87},[77,1417,1418],{"class":319},"options",[77,1420,324],{"class":323},[77,1422,1349],{"class":297},[77,1424,340],{"class":87},[77,1426,88],{"class":87},[77,1428,1429,1432,1434,1437,1440,1443],{"class":79,"line":199},[77,1430,1431],{"class":94},"  options",[77,1433,375],{"class":87},[77,1435,1436],{"class":94},"status",[77,1438,1439],{"class":323}," !==",[77,1441,1442],{"class":887}," 200",[77,1444,1445],{"class":323}," &&\n",[77,1447,1448,1450,1452,1454,1456,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1486,1488,1490,1492,1494,1496,1498,1501,1503],{"class":79,"line":245},[77,1449,546],{"class":94},[77,1451,375],{"class":87},[77,1453,551],{"class":281},[77,1455,316],{"class":381},[77,1457,1458],{"class":158},"`${",[77,1460,192],{"class":94},[77,1462,375],{"class":158},[77,1464,567],{"class":281},[77,1466,316],{"class":570},[77,1468,166],{"class":158},[77,1470,575],{"class":162},[77,1472,166],{"class":158},[77,1474,340],{"class":570},[77,1476,152],{"class":158},[77,1478,584],{"class":158},[77,1480,192],{"class":94},[77,1482,375],{"class":158},[77,1484,1485],{"class":281},"red",[77,1487,316],{"class":570},[77,1489,1418],{"class":94},[77,1491,375],{"class":158},[77,1493,798],{"class":94},[77,1495,340],{"class":570},[77,1497,152],{"class":158},[77,1499,1500],{"class":158}," `",[77,1502,340],{"class":381},[77,1504,169],{"class":87},[77,1506,1507],{"class":79,"line":268},[77,1508,1509],{"class":539},"  \u002F\u002F 正常返回的接口信息\n",[77,1511,1512,1515],{"class":79,"line":275},[77,1513,1514],{"class":83},"  return",[77,1516,88],{"class":87},[77,1518,1519,1522,1524,1527,1529,1531],{"class":79,"line":287},[77,1520,1521],{"class":381},"    message",[77,1523,324],{"class":87},[77,1525,1526],{"class":94}," options",[77,1528,375],{"class":87},[77,1530,798],{"class":94},[77,1532,98],{"class":87},[77,1534,1535,1538,1540,1542,1544,1546,1548,1550],{"class":79,"line":309},[77,1536,1537],{"class":381},"    status",[77,1539,324],{"class":87},[77,1541,1526],{"class":94},[77,1543,375],{"class":87},[77,1545,1436],{"class":94},[77,1547,837],{"class":323},[77,1549,1442],{"class":887},[77,1551,98],{"class":87},[77,1553,1554,1557,1559,1562,1564,1566,1568,1571,1573],{"class":79,"line":359},[77,1555,1556],{"class":381},"    timestamp",[77,1558,324],{"class":87},[77,1560,1561],{"class":323}," new",[77,1563,372],{"class":281},[77,1565,382],{"class":381},[77,1567,375],{"class":87},[77,1569,1570],{"class":281},"toISOString",[77,1572,382],{"class":381},[77,1574,98],{"class":87},[77,1576,1577,1580,1582,1584,1586,1588],{"class":79,"line":387},[77,1578,1579],{"class":381},"    context",[77,1581,324],{"class":87},[77,1583,1526],{"class":94},[77,1585,375],{"class":87},[77,1587,320],{"class":94},[77,1589,98],{"class":87},[77,1591,1592],{"class":79,"line":416},[77,1593,1594],{"class":87},"  };\n",[77,1596,1597],{"class":79,"line":428},[77,1598,1291],{"class":87},[53,1600,58],{"id":58},[23,1602,1603],{},[26,1604,1605],{},"使用的方式大致分为俩种，全局使用和局部使用",[1607,1608,1609],"h3",{"id":1609},"全局使用",[1611,1612,1614,1615,1618],"h4",{"id":1613},"在appmodulets中添加如下","在",[60,1616,1617],{},"app.module.ts","中添加如下：",[69,1620,1622],{"className":71,"code":1621,"language":73,"meta":9,"style":9},"@Module({\n  providers: [\n    {\n      provide: APP_INTERCEPTOR,\n      useClass: InterceptorInterceptor,\n    },\n  ]\n})\n",[60,1623,1624,1635,1645,1650,1662,1673,1678,1683],{"__ignoreMap":9},[77,1625,1626,1628,1631,1633],{"class":79,"line":80},[77,1627,278],{"class":87},[77,1629,1630],{"class":281},"Module",[77,1632,316],{"class":94},[77,1634,779],{"class":87},[77,1636,1637,1640,1642],{"class":79,"line":91},[77,1638,1639],{"class":381},"  providers",[77,1641,324],{"class":87},[77,1643,1644],{"class":94}," [\n",[77,1646,1647],{"class":79,"line":101},[77,1648,1649],{"class":87},"    {\n",[77,1651,1652,1655,1657,1660],{"class":79,"line":109},[77,1653,1654],{"class":381},"      provide",[77,1656,324],{"class":87},[77,1658,1659],{"class":365}," APP_INTERCEPTOR",[77,1661,98],{"class":87},[77,1663,1664,1667,1669,1671],{"class":79,"line":117},[77,1665,1666],{"class":381},"      useClass",[77,1668,324],{"class":87},[77,1670,298],{"class":94},[77,1672,98],{"class":87},[77,1674,1675],{"class":79,"line":125},[77,1676,1677],{"class":87},"    },\n",[77,1679,1680],{"class":79,"line":133},[77,1681,1682],{"class":94},"  ]\n",[77,1684,1685,1687],{"class":79,"line":141},[77,1686,152],{"class":87},[77,1688,1689],{"class":94},")\n",[1611,1691,1614,1693,1696],{"id":1692},"在maints中使用",[60,1694,1695],{},"main.ts","中使用:",[69,1698,1700],{"className":71,"code":1699,"language":73,"meta":9,"style":9},"app.useGlobalInterceptors(new InterceptorInterceptor());\n",[60,1701,1702],{"__ignoreMap":9},[77,1703,1704,1707,1709,1712,1714,1717,1719,1722],{"class":79,"line":80},[77,1705,1706],{"class":94},"app",[77,1708,375],{"class":87},[77,1710,1711],{"class":281},"useGlobalInterceptors",[77,1713,316],{"class":94},[77,1715,1716],{"class":323},"new",[77,1718,298],{"class":281},[77,1720,1721],{"class":94},"())",[77,1723,169],{"class":87},[1607,1725,1726],{"id":1726},"局部使用",[26,1728,1729,1730,1733],{},"在需要的",[60,1731,1732],{},"controller","添加，如下：",[69,1735,1737],{"className":71,"code":1736,"language":73,"meta":9,"style":9},"@Controller()\nexport class AppController {\n  constructor(private readonly appService: AppService) {}\n\n  @Get()\n  getHello(): string {\n    return this.appService.getHello();\n  }\n\n  @Get(\"\u002Fa\")\n  @UseInterceptors(InterceptorInterceptor)\n  getA(): string {\n    \u002F\u002F throw new Error('Something went wrong');\n    return this.appService.getA();\n  }\n}\n",[60,1738,1739,1748,1759,1785,1789,1799,1812,1833,1837,1841,1858,1868,1881,1886,1905,1909],{"__ignoreMap":9},[77,1740,1741,1743,1746],{"class":79,"line":80},[77,1742,278],{"class":87},[77,1744,1745],{"class":281},"Controller",[77,1747,284],{"class":94},[77,1749,1750,1752,1754,1757],{"class":79,"line":91},[77,1751,290],{"class":83},[77,1753,294],{"class":293},[77,1755,1756],{"class":297}," AppController",[77,1758,88],{"class":87},[77,1760,1761,1764,1766,1769,1772,1775,1777,1780,1782],{"class":79,"line":101},[77,1762,1763],{"class":293},"  constructor",[77,1765,316],{"class":87},[77,1767,1768],{"class":293},"private",[77,1770,1771],{"class":293}," readonly",[77,1773,1774],{"class":319}," appService",[77,1776,324],{"class":323},[77,1778,1779],{"class":297}," AppService",[77,1781,340],{"class":87},[77,1783,1784],{"class":87}," {}\n",[77,1786,1787],{"class":79,"line":109},[77,1788,272],{"emptyLinePlaceholder":271},[77,1790,1791,1794,1797],{"class":79,"line":117},[77,1792,1793],{"class":87},"  @",[77,1795,1796],{"class":281},"Get",[77,1798,284],{"class":94},[77,1800,1801,1804,1806,1808,1810],{"class":79,"line":125},[77,1802,1803],{"class":312},"  getHello",[77,1805,382],{"class":87},[77,1807,324],{"class":323},[77,1809,1362],{"class":350},[77,1811,88],{"class":87},[77,1813,1814,1816,1819,1821,1824,1826,1829,1831],{"class":79,"line":133},[77,1815,692],{"class":83},[77,1817,1818],{"class":177}," this",[77,1820,375],{"class":87},[77,1822,1823],{"class":94},"appService",[77,1825,375],{"class":87},[77,1827,1828],{"class":281},"getHello",[77,1830,382],{"class":381},[77,1832,169],{"class":87},[77,1834,1835],{"class":79,"line":141},[77,1836,1285],{"class":87},[77,1838,1839],{"class":79,"line":149},[77,1840,272],{"emptyLinePlaceholder":271},[77,1842,1843,1845,1847,1849,1851,1854,1856],{"class":79,"line":172},[77,1844,1793],{"class":87},[77,1846,1796],{"class":281},[77,1848,316],{"class":94},[77,1850,166],{"class":158},[77,1852,1853],{"class":162},"\u002Fa",[77,1855,166],{"class":158},[77,1857,1689],{"class":94},[77,1859,1860,1862,1865],{"class":79,"line":199},[77,1861,1793],{"class":87},[77,1863,1864],{"class":281},"UseInterceptors",[77,1866,1867],{"class":94},"(InterceptorInterceptor)\n",[77,1869,1870,1873,1875,1877,1879],{"class":79,"line":245},[77,1871,1872],{"class":312},"  getA",[77,1874,382],{"class":87},[77,1876,324],{"class":323},[77,1878,1362],{"class":350},[77,1880,88],{"class":87},[77,1882,1883],{"class":79,"line":268},[77,1884,1885],{"class":539},"    \u002F\u002F throw new Error('Something went wrong');\n",[77,1887,1888,1890,1892,1894,1896,1898,1901,1903],{"class":79,"line":275},[77,1889,692],{"class":83},[77,1891,1818],{"class":177},[77,1893,375],{"class":87},[77,1895,1823],{"class":94},[77,1897,375],{"class":87},[77,1899,1900],{"class":281},"getA",[77,1902,382],{"class":381},[77,1904,169],{"class":87},[77,1906,1907],{"class":79,"line":287},[77,1908,1285],{"class":87},[77,1910,1911],{"class":79,"line":309},[77,1912,1291],{"class":87},[53,1914,1915],{"id":1915},"参考文献",[1917,1918,1919,1932],"table",{},[1920,1921,1922],"thead",{},[1923,1924,1925,1929],"tr",{},[1926,1927,1928],"th",{},"资料",[1926,1930,1931],{},"说明",[1933,1934,1935,1949],"tbody",{},[1923,1936,1937,1946],{},[1938,1939,1940],"td",{},[34,1941,1945],{"href":1942,"rel":1943},"https:\u002F\u002Fdocs.nestjs.com\u002Finterceptors",[1944],"nofollow","Interceptors",[1938,1947,1948],{},"官方",[1923,1950,1951,1958],{},[1938,1952,1953],{},[34,1954,1957],{"href":1955,"rel":1956},"https:\u002F\u002Fdocs.nestjs.com\u002Finterceptors#response-mapping",[1944],"Response mapping",[1938,1959,1960],{},"RxJS 映射",[1962,1963,1964],"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 .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .sfo-9, html code.shiki .sfo-9{--shiki-light:#90A4AE;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sucvu, html code.shiki .sucvu{--shiki-light:#E53935;--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":9,"searchDepth":91,"depth":91,"links":1966},[1967,1968,1972],{"id":55,"depth":91,"text":55},{"id":58,"depth":91,"text":58,"children":1969},[1970,1971],{"id":1609,"depth":101,"text":1609},{"id":1726,"depth":101,"text":1726},{"id":1915,"depth":91,"text":1915},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fend\u002FNestJS\u002Fbefore\u002Fitc","knowledge\u002Fknowledge\u002Fbooklet\u002Fend\u002FNestJS\u002Fbefore\u002Fitc.md","md",{"items":1978},[1979,1982,1985,1988,1992,1995],{"path":1980,"title":1981,"description":9,"category":10,"score":125},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fexce","异常处理器",{"path":1983,"title":1984,"description":9,"category":10,"score":125},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fenv","环境加载",{"path":1986,"title":1987,"description":9,"category":10,"score":125},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fdatabase","数据库的配置",{"path":1989,"title":1990,"description":1991,"category":10,"score":125},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finfo","归档说明（before\u002F）","本目录（before\u002F）为早期 NestJS 实战笔记：以完整业务片段（守卫、拦截器、MongoDB、JWT 等）为主，写法与文件命名不统一。新项目请跟 new\u002F 主线，技术细节以 docs.nestjs.com 为准。",{"path":1993,"title":1994,"description":9,"category":10,"score":125},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fnext","路由守卫",{"path":1996,"title":1997,"description":9,"category":10,"score":125},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fdemo","入手Demo",{"series":1999,"title":2000,"items":2001,"index":125,"prev":2030,"next":2031},"booklet\u002Fend\u002Fnestjs\u002Fbefore","before",[2002,2004,2006,2008,2010,2012,2015,2016,2020,2024,2026],{"path":1986,"title":1987,"date":2003,"pinned":15},"2024-06-22",{"path":1996,"title":1997,"date":2005,"pinned":15},"2022-10-15",{"path":1983,"title":1984,"date":2007,"pinned":15},"2024-09-01",{"path":1980,"title":1981,"date":2009,"pinned":15},"2026-03-17",{"path":1989,"title":1990,"date":2011,"pinned":15},"2023-08-31",{"path":46,"title":2013,"date":2014,"pinned":15},"操作日志拦截器","2020-02-20",{"path":7,"title":8,"date":14,"pinned":15},{"path":2017,"title":2018,"date":2019,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fjwt","JWT 与 Passport 授权","2021-08-10",{"path":2021,"title":2022,"date":2023,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fmi","Nest 中间件","2022-06-21",{"path":1993,"title":1994,"date":2025,"pinned":15},"2022-12-01",{"path":2027,"title":2028,"date":2029,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fother","其他配置","2022-05-23",{"path":46,"title":2013,"date":2014,"pinned":15},{"path":2017,"title":2018,"date":2019,"pinned":15}]