[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finjectable":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finjectable":3809,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finjectable":3829},{"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":3805,"stem":3806,"id":3807,"extension":3808},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finjectable","操作日志拦截器","","技能小册",[12,13],"nestjs","injectable","2020-02-20",false,{"type":17,"value":18,"toc":3790},"minimark",[19,22,49,61,64,83,86,186,189,193,197,447,450,1131,1134,1541,3006,3009,3016,3088,3091,3296,3299,3302,3611,3614,3618,3681,3684,3687,3722,3725,3786],[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\u002Fitc","itc","。",[26,50,51,52,56,57,60],{},"拦截器是用 ",[53,54,55],"code",{},"@Injectable()"," 装饰器注释并实现 ",[53,58,59],{},"NestInterceptor"," 接口的类。",[26,62,63],{},"拦截器具有一组有用的功能，这些功能的灵感来自 面向方面编程 (AOP) 技术。它们可以：",[65,66,67,71,74,77,80],"ul",{},[68,69,70],"li",{},"在方法执行之前\u002F之后绑定额外的逻辑",[68,72,73],{},"转换函数返回的结果",[68,75,76],{},"转换函数抛出的异常",[68,78,79],{},"扩展基本功能行为",[68,81,82],{},"根据特定条件完全覆盖函数（例如，出于缓存目的）",[26,84,85],{},"在日常接口调试中，总会看到后端返回的数据格式都是一致的，例如：",[87,88,92],"pre",{"className":89,"code":90,"language":91,"meta":9,"style":9},"language-json shiki shiki-themes material-theme-lighter github-light github-dark","{\n  \"success\": true,\n  \"message\": \"操作成功\",\n  \"context\": {},\n  \"code\": 200\n}\n","json",[53,93,94,103,126,150,165,180],{"__ignoreMap":9},[95,96,99],"span",{"class":97,"line":98},"line",1,[95,100,102],{"class":101},"sP7_E","{\n",[95,104,106,110,114,117,120,123],{"class":97,"line":105},2,[95,107,109],{"class":108},"s39Yj","  \"",[95,111,113],{"class":112},"sseR_","success",[95,115,116],{"class":108},"\"",[95,118,119],{"class":101},":",[95,121,122],{"class":108}," true",[95,124,125],{"class":101},",\n",[95,127,129,131,134,136,138,142,146,148],{"class":97,"line":128},3,[95,130,109],{"class":108},[95,132,133],{"class":112},"message",[95,135,116],{"class":108},[95,137,119],{"class":101},[95,139,141],{"class":140},"sjJ54"," \"",[95,143,145],{"class":144},"s_sjI","操作成功",[95,147,116],{"class":140},[95,149,125],{"class":101},[95,151,153,155,158,160,162],{"class":97,"line":152},4,[95,154,109],{"class":108},[95,156,157],{"class":112},"context",[95,159,116],{"class":108},[95,161,119],{"class":101},[95,163,164],{"class":101}," {},\n",[95,166,168,170,172,174,176],{"class":97,"line":167},5,[95,169,109],{"class":108},[95,171,53],{"class":112},[95,173,116],{"class":108},[95,175,119],{"class":101},[95,177,179],{"class":178},"srdBf"," 200\n",[95,181,183],{"class":97,"line":182},6,[95,184,185],{"class":101},"}\n",[26,187,188],{},"接下来我会提到俩个案例，一个是接口返回拦截，一个是接口日志记录",[190,191,192],"h2",{"id":192},"接口调用记录",[194,195,196],"h3",{"id":196},"自定义元数据",[87,198,202],{"className":199,"code":200,"language":201,"meta":9,"style":9},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import { SetMetadata } from \"@nestjs\u002Fcommon\";\nimport { LOG_KEY_METADATA } from \"..\u002Fconstants\u002Fmetadata.constant\";\nimport { BusinessTypeEnum, LogProductEnum } from \"..\u002Fenum\u002Flog.enum\";\n\nexport class LogOption {\n  projectCode: LogProductEnum;\n  title: string;\n  businessType?: BusinessTypeEnum = BusinessTypeEnum.OTHER;\n}\nexport const Log = (logOption: LogOption) => {\n  return SetMetadata(LOG_KEY_METADATA, Object.assign(new LogOption(), logOption));\n};\n","ts",[53,203,204,233,255,283,289,305,318,332,357,362,395,441],{"__ignoreMap":9},[95,205,206,210,213,217,220,223,225,228,230],{"class":97,"line":98},[95,207,209],{"class":208},"sVHd0","import",[95,211,212],{"class":101}," {",[95,214,216],{"class":215},"su5hD"," SetMetadata",[95,218,219],{"class":101}," }",[95,221,222],{"class":208}," from",[95,224,141],{"class":140},[95,226,227],{"class":144},"@nestjs\u002Fcommon",[95,229,116],{"class":140},[95,231,232],{"class":101},";\n",[95,234,235,237,239,242,244,246,248,251,253],{"class":97,"line":105},[95,236,209],{"class":208},[95,238,212],{"class":101},[95,240,241],{"class":215}," LOG_KEY_METADATA",[95,243,219],{"class":101},[95,245,222],{"class":208},[95,247,141],{"class":140},[95,249,250],{"class":144},"..\u002Fconstants\u002Fmetadata.constant",[95,252,116],{"class":140},[95,254,232],{"class":101},[95,256,257,259,261,264,267,270,272,274,276,279,281],{"class":97,"line":128},[95,258,209],{"class":208},[95,260,212],{"class":101},[95,262,263],{"class":215}," BusinessTypeEnum",[95,265,266],{"class":101},",",[95,268,269],{"class":215}," LogProductEnum",[95,271,219],{"class":101},[95,273,222],{"class":208},[95,275,141],{"class":140},[95,277,278],{"class":144},"..\u002Fenum\u002Flog.enum",[95,280,116],{"class":140},[95,282,232],{"class":101},[95,284,285],{"class":97,"line":152},[95,286,288],{"emptyLinePlaceholder":287},true,"\n",[95,290,291,294,298,302],{"class":97,"line":167},[95,292,293],{"class":208},"export",[95,295,297],{"class":296},"sbsja"," class",[95,299,301],{"class":300},"sbgvK"," LogOption",[95,303,304],{"class":101}," {\n",[95,306,307,311,314,316],{"class":97,"line":182},[95,308,310],{"class":309},"sucvu","  projectCode",[95,312,119],{"class":313},"smGrS",[95,315,269],{"class":300},[95,317,232],{"class":101},[95,319,321,324,326,330],{"class":97,"line":320},7,[95,322,323],{"class":309},"  title",[95,325,119],{"class":313},[95,327,329],{"class":328},"sZMiF"," string",[95,331,232],{"class":101},[95,333,335,338,341,343,346,348,351,355],{"class":97,"line":334},8,[95,336,337],{"class":309},"  businessType",[95,339,340],{"class":313},"?:",[95,342,263],{"class":300},[95,344,345],{"class":313}," =",[95,347,263],{"class":215},[95,349,350],{"class":101},".",[95,352,354],{"class":353},"s_hVV","OTHER",[95,356,232],{"class":101},[95,358,360],{"class":97,"line":359},9,[95,361,185],{"class":101},[95,363,365,367,370,374,376,379,383,385,387,390,393],{"class":97,"line":364},10,[95,366,293],{"class":208},[95,368,369],{"class":296}," const",[95,371,373],{"class":372},"sfCm-"," Log",[95,375,345],{"class":313},[95,377,378],{"class":101}," (",[95,380,382],{"class":381},"s99_P","logOption",[95,384,119],{"class":313},[95,386,301],{"class":300},[95,388,389],{"class":101},")",[95,391,392],{"class":296}," =>",[95,394,304],{"class":101},[95,396,398,401,404,408,411,413,416,418,421,423,426,428,431,433,436,439],{"class":97,"line":397},11,[95,399,400],{"class":208},"  return",[95,402,216],{"class":403},"sGLFI",[95,405,407],{"class":406},"skxfh","(",[95,409,410],{"class":353},"LOG_KEY_METADATA",[95,412,266],{"class":101},[95,414,415],{"class":215}," Object",[95,417,350],{"class":101},[95,419,420],{"class":403},"assign",[95,422,407],{"class":406},[95,424,425],{"class":313},"new",[95,427,301],{"class":403},[95,429,430],{"class":406},"()",[95,432,266],{"class":101},[95,434,435],{"class":215}," logOption",[95,437,438],{"class":406},"))",[95,440,232],{"class":101},[95,442,444],{"class":97,"line":443},12,[95,445,446],{"class":101},"};\n",[194,448,449],{"id":449},"表结构",[87,451,453],{"className":199,"code":452,"language":201,"meta":9,"style":9},"import { Prop, Schema, SchemaFactory } from \"@nestjs\u002Fmongoose\";\nimport { DeviceSysCodeEnum } from \"src\u002Fcommon\u002Fenum\u002Fdevice.enum\";\nimport { BusinessTypeEnum, LogProductEnum, LogStatusEnum } from \"src\u002Fcommon\u002Fenum\u002Flog.enum\";\n\nexport const LOG_MODEL_NAME = \"db_logs\";\n\n@Schema()\nexport class Log_Schema {\n  \u002F\u002F 模块标题\n  @Prop()\n  title: string;\n\n  \u002F\u002F 业务类型, 添加还是修改\n  @Prop({ default: BusinessTypeEnum.OTHER })\n  businessType: number;\n\n  \u002F\u002F 请求平台code\n  @Prop({ default: DeviceSysCodeEnum.OTHER })\n  platformCode: string;\n\n  \u002F\u002F 项目code\n  @Prop({ default: LogProductEnum.OTHER })\n  projectCode: number;\n\n  \u002F\u002F 请求方法\n  @Prop()\n  method: string;\n\n  \u002F\u002F 请求参数\n  @Prop()\n  requestParam: string;\n\n  \u002F\u002F 请求用户\n  @Prop()\n  operateUser: string;\n\n  \u002F\u002F 请求用户id\n  @Prop()\n  operateUserId: string;\n\n  \u002F\u002F 请求ip\n  @Prop()\n  ip: string;\n\n  \u002F\u002F 请求的地址\n  @Prop()\n  address: string;\n\n  \u002F\u002F 请求的状态\n  @Prop({ default: LogStatusEnum.SUCCESS })\n  status: number;\n\n  \u002F\u002F 请求异常原因\n  @Prop()\n  errorMsg: string;\n\n  \u002F\u002F 请求地址\n  @Prop()\n  url: string;\n\n  \u002F\u002F 操作时间\n  @Prop()\n  createTime: string;\n}\n\nexport const LogSchema = SchemaFactory.createForClass(Log_Schema);\n",[53,454,455,487,509,539,543,563,567,578,589,595,605,615,619,625,653,665,670,676,701,713,718,724,749,760,765,771,780,792,797,803,812,824,829,835,844,856,861,867,876,888,893,899,908,920,925,931,940,952,957,963,989,1001,1006,1012,1021,1033,1038,1044,1053,1065,1070,1076,1085,1097,1102,1107],{"__ignoreMap":9},[95,456,457,459,461,464,466,469,471,474,476,478,480,483,485],{"class":97,"line":98},[95,458,209],{"class":208},[95,460,212],{"class":101},[95,462,463],{"class":215}," Prop",[95,465,266],{"class":101},[95,467,468],{"class":215}," Schema",[95,470,266],{"class":101},[95,472,473],{"class":215}," SchemaFactory",[95,475,219],{"class":101},[95,477,222],{"class":208},[95,479,141],{"class":140},[95,481,482],{"class":144},"@nestjs\u002Fmongoose",[95,484,116],{"class":140},[95,486,232],{"class":101},[95,488,489,491,493,496,498,500,502,505,507],{"class":97,"line":105},[95,490,209],{"class":208},[95,492,212],{"class":101},[95,494,495],{"class":215}," DeviceSysCodeEnum",[95,497,219],{"class":101},[95,499,222],{"class":208},[95,501,141],{"class":140},[95,503,504],{"class":144},"src\u002Fcommon\u002Fenum\u002Fdevice.enum",[95,506,116],{"class":140},[95,508,232],{"class":101},[95,510,511,513,515,517,519,521,523,526,528,530,532,535,537],{"class":97,"line":128},[95,512,209],{"class":208},[95,514,212],{"class":101},[95,516,263],{"class":215},[95,518,266],{"class":101},[95,520,269],{"class":215},[95,522,266],{"class":101},[95,524,525],{"class":215}," LogStatusEnum",[95,527,219],{"class":101},[95,529,222],{"class":208},[95,531,141],{"class":140},[95,533,534],{"class":144},"src\u002Fcommon\u002Fenum\u002Flog.enum",[95,536,116],{"class":140},[95,538,232],{"class":101},[95,540,541],{"class":97,"line":152},[95,542,288],{"emptyLinePlaceholder":287},[95,544,545,547,549,552,554,556,559,561],{"class":97,"line":167},[95,546,293],{"class":208},[95,548,369],{"class":296},[95,550,551],{"class":353}," LOG_MODEL_NAME",[95,553,345],{"class":313},[95,555,141],{"class":140},[95,557,558],{"class":144},"db_logs",[95,560,116],{"class":140},[95,562,232],{"class":101},[95,564,565],{"class":97,"line":182},[95,566,288],{"emptyLinePlaceholder":287},[95,568,569,572,575],{"class":97,"line":320},[95,570,571],{"class":101},"@",[95,573,574],{"class":403},"Schema",[95,576,577],{"class":215},"()\n",[95,579,580,582,584,587],{"class":97,"line":334},[95,581,293],{"class":208},[95,583,297],{"class":296},[95,585,586],{"class":300}," Log_Schema",[95,588,304],{"class":101},[95,590,591],{"class":97,"line":359},[95,592,594],{"class":593},"sutJx","  \u002F\u002F 模块标题\n",[95,596,597,600,603],{"class":97,"line":364},[95,598,599],{"class":101},"  @",[95,601,602],{"class":403},"Prop",[95,604,577],{"class":215},[95,606,607,609,611,613],{"class":97,"line":397},[95,608,323],{"class":309},[95,610,119],{"class":313},[95,612,329],{"class":328},[95,614,232],{"class":101},[95,616,617],{"class":97,"line":443},[95,618,288],{"emptyLinePlaceholder":287},[95,620,622],{"class":97,"line":621},13,[95,623,624],{"class":593},"  \u002F\u002F 业务类型, 添加还是修改\n",[95,626,628,630,632,634,637,640,642,644,646,648,650],{"class":97,"line":627},14,[95,629,599],{"class":101},[95,631,602],{"class":403},[95,633,407],{"class":215},[95,635,636],{"class":101},"{",[95,638,639],{"class":406}," default",[95,641,119],{"class":101},[95,643,263],{"class":215},[95,645,350],{"class":101},[95,647,354],{"class":353},[95,649,219],{"class":101},[95,651,652],{"class":215},")\n",[95,654,656,658,660,663],{"class":97,"line":655},15,[95,657,337],{"class":309},[95,659,119],{"class":313},[95,661,662],{"class":328}," number",[95,664,232],{"class":101},[95,666,668],{"class":97,"line":667},16,[95,669,288],{"emptyLinePlaceholder":287},[95,671,673],{"class":97,"line":672},17,[95,674,675],{"class":593},"  \u002F\u002F 请求平台code\n",[95,677,679,681,683,685,687,689,691,693,695,697,699],{"class":97,"line":678},18,[95,680,599],{"class":101},[95,682,602],{"class":403},[95,684,407],{"class":215},[95,686,636],{"class":101},[95,688,639],{"class":406},[95,690,119],{"class":101},[95,692,495],{"class":215},[95,694,350],{"class":101},[95,696,354],{"class":353},[95,698,219],{"class":101},[95,700,652],{"class":215},[95,702,704,707,709,711],{"class":97,"line":703},19,[95,705,706],{"class":309},"  platformCode",[95,708,119],{"class":313},[95,710,329],{"class":328},[95,712,232],{"class":101},[95,714,716],{"class":97,"line":715},20,[95,717,288],{"emptyLinePlaceholder":287},[95,719,721],{"class":97,"line":720},21,[95,722,723],{"class":593},"  \u002F\u002F 项目code\n",[95,725,727,729,731,733,735,737,739,741,743,745,747],{"class":97,"line":726},22,[95,728,599],{"class":101},[95,730,602],{"class":403},[95,732,407],{"class":215},[95,734,636],{"class":101},[95,736,639],{"class":406},[95,738,119],{"class":101},[95,740,269],{"class":215},[95,742,350],{"class":101},[95,744,354],{"class":353},[95,746,219],{"class":101},[95,748,652],{"class":215},[95,750,752,754,756,758],{"class":97,"line":751},23,[95,753,310],{"class":309},[95,755,119],{"class":313},[95,757,662],{"class":328},[95,759,232],{"class":101},[95,761,763],{"class":97,"line":762},24,[95,764,288],{"emptyLinePlaceholder":287},[95,766,768],{"class":97,"line":767},25,[95,769,770],{"class":593},"  \u002F\u002F 请求方法\n",[95,772,774,776,778],{"class":97,"line":773},26,[95,775,599],{"class":101},[95,777,602],{"class":403},[95,779,577],{"class":215},[95,781,783,786,788,790],{"class":97,"line":782},27,[95,784,785],{"class":309},"  method",[95,787,119],{"class":313},[95,789,329],{"class":328},[95,791,232],{"class":101},[95,793,795],{"class":97,"line":794},28,[95,796,288],{"emptyLinePlaceholder":287},[95,798,800],{"class":97,"line":799},29,[95,801,802],{"class":593},"  \u002F\u002F 请求参数\n",[95,804,806,808,810],{"class":97,"line":805},30,[95,807,599],{"class":101},[95,809,602],{"class":403},[95,811,577],{"class":215},[95,813,815,818,820,822],{"class":97,"line":814},31,[95,816,817],{"class":309},"  requestParam",[95,819,119],{"class":313},[95,821,329],{"class":328},[95,823,232],{"class":101},[95,825,827],{"class":97,"line":826},32,[95,828,288],{"emptyLinePlaceholder":287},[95,830,832],{"class":97,"line":831},33,[95,833,834],{"class":593},"  \u002F\u002F 请求用户\n",[95,836,838,840,842],{"class":97,"line":837},34,[95,839,599],{"class":101},[95,841,602],{"class":403},[95,843,577],{"class":215},[95,845,847,850,852,854],{"class":97,"line":846},35,[95,848,849],{"class":309},"  operateUser",[95,851,119],{"class":313},[95,853,329],{"class":328},[95,855,232],{"class":101},[95,857,859],{"class":97,"line":858},36,[95,860,288],{"emptyLinePlaceholder":287},[95,862,864],{"class":97,"line":863},37,[95,865,866],{"class":593},"  \u002F\u002F 请求用户id\n",[95,868,870,872,874],{"class":97,"line":869},38,[95,871,599],{"class":101},[95,873,602],{"class":403},[95,875,577],{"class":215},[95,877,879,882,884,886],{"class":97,"line":878},39,[95,880,881],{"class":309},"  operateUserId",[95,883,119],{"class":313},[95,885,329],{"class":328},[95,887,232],{"class":101},[95,889,891],{"class":97,"line":890},40,[95,892,288],{"emptyLinePlaceholder":287},[95,894,896],{"class":97,"line":895},41,[95,897,898],{"class":593},"  \u002F\u002F 请求ip\n",[95,900,902,904,906],{"class":97,"line":901},42,[95,903,599],{"class":101},[95,905,602],{"class":403},[95,907,577],{"class":215},[95,909,911,914,916,918],{"class":97,"line":910},43,[95,912,913],{"class":309},"  ip",[95,915,119],{"class":313},[95,917,329],{"class":328},[95,919,232],{"class":101},[95,921,923],{"class":97,"line":922},44,[95,924,288],{"emptyLinePlaceholder":287},[95,926,928],{"class":97,"line":927},45,[95,929,930],{"class":593},"  \u002F\u002F 请求的地址\n",[95,932,934,936,938],{"class":97,"line":933},46,[95,935,599],{"class":101},[95,937,602],{"class":403},[95,939,577],{"class":215},[95,941,943,946,948,950],{"class":97,"line":942},47,[95,944,945],{"class":309},"  address",[95,947,119],{"class":313},[95,949,329],{"class":328},[95,951,232],{"class":101},[95,953,955],{"class":97,"line":954},48,[95,956,288],{"emptyLinePlaceholder":287},[95,958,960],{"class":97,"line":959},49,[95,961,962],{"class":593},"  \u002F\u002F 请求的状态\n",[95,964,966,968,970,972,974,976,978,980,982,985,987],{"class":97,"line":965},50,[95,967,599],{"class":101},[95,969,602],{"class":403},[95,971,407],{"class":215},[95,973,636],{"class":101},[95,975,639],{"class":406},[95,977,119],{"class":101},[95,979,525],{"class":215},[95,981,350],{"class":101},[95,983,984],{"class":353},"SUCCESS",[95,986,219],{"class":101},[95,988,652],{"class":215},[95,990,992,995,997,999],{"class":97,"line":991},51,[95,993,994],{"class":309},"  status",[95,996,119],{"class":313},[95,998,662],{"class":328},[95,1000,232],{"class":101},[95,1002,1004],{"class":97,"line":1003},52,[95,1005,288],{"emptyLinePlaceholder":287},[95,1007,1009],{"class":97,"line":1008},53,[95,1010,1011],{"class":593},"  \u002F\u002F 请求异常原因\n",[95,1013,1015,1017,1019],{"class":97,"line":1014},54,[95,1016,599],{"class":101},[95,1018,602],{"class":403},[95,1020,577],{"class":215},[95,1022,1024,1027,1029,1031],{"class":97,"line":1023},55,[95,1025,1026],{"class":309},"  errorMsg",[95,1028,119],{"class":313},[95,1030,329],{"class":328},[95,1032,232],{"class":101},[95,1034,1036],{"class":97,"line":1035},56,[95,1037,288],{"emptyLinePlaceholder":287},[95,1039,1041],{"class":97,"line":1040},57,[95,1042,1043],{"class":593},"  \u002F\u002F 请求地址\n",[95,1045,1047,1049,1051],{"class":97,"line":1046},58,[95,1048,599],{"class":101},[95,1050,602],{"class":403},[95,1052,577],{"class":215},[95,1054,1056,1059,1061,1063],{"class":97,"line":1055},59,[95,1057,1058],{"class":309},"  url",[95,1060,119],{"class":313},[95,1062,329],{"class":328},[95,1064,232],{"class":101},[95,1066,1068],{"class":97,"line":1067},60,[95,1069,288],{"emptyLinePlaceholder":287},[95,1071,1073],{"class":97,"line":1072},61,[95,1074,1075],{"class":593},"  \u002F\u002F 操作时间\n",[95,1077,1079,1081,1083],{"class":97,"line":1078},62,[95,1080,599],{"class":101},[95,1082,602],{"class":403},[95,1084,577],{"class":215},[95,1086,1088,1091,1093,1095],{"class":97,"line":1087},63,[95,1089,1090],{"class":309},"  createTime",[95,1092,119],{"class":313},[95,1094,329],{"class":328},[95,1096,232],{"class":101},[95,1098,1100],{"class":97,"line":1099},64,[95,1101,185],{"class":101},[95,1103,1105],{"class":97,"line":1104},65,[95,1106,288],{"emptyLinePlaceholder":287},[95,1108,1110,1112,1114,1117,1119,1121,1123,1126,1129],{"class":97,"line":1109},66,[95,1111,293],{"class":208},[95,1113,369],{"class":296},[95,1115,1116],{"class":353}," LogSchema",[95,1118,345],{"class":313},[95,1120,473],{"class":215},[95,1122,350],{"class":101},[95,1124,1125],{"class":403},"createForClass",[95,1127,1128],{"class":215},"(Log_Schema)",[95,1130,232],{"class":101},[194,1132,1133],{"id":1133},"涉及到的枚举",[87,1135,1137],{"className":199,"code":1136,"language":201,"meta":9,"style":9},"export enum LogProductEnum {\n  \u002F\u002F 其他\n  OTHER = 0,\n  \u002F\u002F 后台\n  ADMIN = 1,\n  \u002F\u002F 商家\n  MERCHANT = 2,\n  \u002F\u002F 全局\n  GLOBAL = 3,\n}\n\nexport enum BusinessTypeEnum {\n  \u002F\u002F 其它\n  OTHER = 0,\n  \u002F\u002F 新增\n  INSERT = 1,\n  \u002F\u002F 修改\n  UPDATE = 2,\n  \u002F\u002F 删除\n  DELETE = 3,\n  \u002F\u002F 查询\n  SELECT = 4,\n  \u002F\u002F 授权\n  GRANT = 5,\n  \u002F\u002F 导出\n  EXPORT = 6,\n  \u002F\u002F 导入\n  IMPORT = 7,\n}\n\nexport enum LogStatusEnum {\n  \u002F\u002F 成功\n  SUCCESS = 0,\n  \u002F\u002F 失败\n  FAIL = 1,\n}\n\nexport enum DeviceSysCodeEnum {\n  \u002F\u002F h5\n  H5 = \"H5\",\n  \u002F\u002F pc\n  PC = \"PC\",\n  \u002F\u002F 移动端\n  MOBILE = \"MOBILE\",\n  \u002F\u002F 小程序\n  MINI_PROGRAM = \"MINI_PROGRAM\",\n  \u002F\u002F 其他\n  OTHER = \"OTHER\",\n}\n",[53,1138,1139,1150,1155,1167,1172,1184,1189,1201,1206,1218,1222,1226,1236,1241,1251,1256,1267,1272,1283,1288,1299,1304,1316,1321,1333,1338,1350,1355,1367,1371,1375,1385,1390,1401,1406,1417,1421,1425,1435,1440,1456,1461,1477,1482,1498,1503,1519,1523,1537],{"__ignoreMap":9},[95,1140,1141,1143,1146,1148],{"class":97,"line":98},[95,1142,293],{"class":208},[95,1144,1145],{"class":296}," enum",[95,1147,269],{"class":300},[95,1149,304],{"class":101},[95,1151,1152],{"class":97,"line":105},[95,1153,1154],{"class":593},"  \u002F\u002F 其他\n",[95,1156,1157,1160,1162,1165],{"class":97,"line":128},[95,1158,1159],{"class":353},"  OTHER",[95,1161,345],{"class":313},[95,1163,1164],{"class":178}," 0",[95,1166,125],{"class":101},[95,1168,1169],{"class":97,"line":152},[95,1170,1171],{"class":593},"  \u002F\u002F 后台\n",[95,1173,1174,1177,1179,1182],{"class":97,"line":167},[95,1175,1176],{"class":353},"  ADMIN",[95,1178,345],{"class":313},[95,1180,1181],{"class":178}," 1",[95,1183,125],{"class":101},[95,1185,1186],{"class":97,"line":182},[95,1187,1188],{"class":593},"  \u002F\u002F 商家\n",[95,1190,1191,1194,1196,1199],{"class":97,"line":320},[95,1192,1193],{"class":353},"  MERCHANT",[95,1195,345],{"class":313},[95,1197,1198],{"class":178}," 2",[95,1200,125],{"class":101},[95,1202,1203],{"class":97,"line":334},[95,1204,1205],{"class":593},"  \u002F\u002F 全局\n",[95,1207,1208,1211,1213,1216],{"class":97,"line":359},[95,1209,1210],{"class":353},"  GLOBAL",[95,1212,345],{"class":313},[95,1214,1215],{"class":178}," 3",[95,1217,125],{"class":101},[95,1219,1220],{"class":97,"line":364},[95,1221,185],{"class":101},[95,1223,1224],{"class":97,"line":397},[95,1225,288],{"emptyLinePlaceholder":287},[95,1227,1228,1230,1232,1234],{"class":97,"line":443},[95,1229,293],{"class":208},[95,1231,1145],{"class":296},[95,1233,263],{"class":300},[95,1235,304],{"class":101},[95,1237,1238],{"class":97,"line":621},[95,1239,1240],{"class":593},"  \u002F\u002F 其它\n",[95,1242,1243,1245,1247,1249],{"class":97,"line":627},[95,1244,1159],{"class":353},[95,1246,345],{"class":313},[95,1248,1164],{"class":178},[95,1250,125],{"class":101},[95,1252,1253],{"class":97,"line":655},[95,1254,1255],{"class":593},"  \u002F\u002F 新增\n",[95,1257,1258,1261,1263,1265],{"class":97,"line":667},[95,1259,1260],{"class":353},"  INSERT",[95,1262,345],{"class":313},[95,1264,1181],{"class":178},[95,1266,125],{"class":101},[95,1268,1269],{"class":97,"line":672},[95,1270,1271],{"class":593},"  \u002F\u002F 修改\n",[95,1273,1274,1277,1279,1281],{"class":97,"line":678},[95,1275,1276],{"class":353},"  UPDATE",[95,1278,345],{"class":313},[95,1280,1198],{"class":178},[95,1282,125],{"class":101},[95,1284,1285],{"class":97,"line":703},[95,1286,1287],{"class":593},"  \u002F\u002F 删除\n",[95,1289,1290,1293,1295,1297],{"class":97,"line":715},[95,1291,1292],{"class":353},"  DELETE",[95,1294,345],{"class":313},[95,1296,1215],{"class":178},[95,1298,125],{"class":101},[95,1300,1301],{"class":97,"line":720},[95,1302,1303],{"class":593},"  \u002F\u002F 查询\n",[95,1305,1306,1309,1311,1314],{"class":97,"line":726},[95,1307,1308],{"class":353},"  SELECT",[95,1310,345],{"class":313},[95,1312,1313],{"class":178}," 4",[95,1315,125],{"class":101},[95,1317,1318],{"class":97,"line":751},[95,1319,1320],{"class":593},"  \u002F\u002F 授权\n",[95,1322,1323,1326,1328,1331],{"class":97,"line":762},[95,1324,1325],{"class":353},"  GRANT",[95,1327,345],{"class":313},[95,1329,1330],{"class":178}," 5",[95,1332,125],{"class":101},[95,1334,1335],{"class":97,"line":767},[95,1336,1337],{"class":593},"  \u002F\u002F 导出\n",[95,1339,1340,1343,1345,1348],{"class":97,"line":773},[95,1341,1342],{"class":353},"  EXPORT",[95,1344,345],{"class":313},[95,1346,1347],{"class":178}," 6",[95,1349,125],{"class":101},[95,1351,1352],{"class":97,"line":782},[95,1353,1354],{"class":593},"  \u002F\u002F 导入\n",[95,1356,1357,1360,1362,1365],{"class":97,"line":794},[95,1358,1359],{"class":353},"  IMPORT",[95,1361,345],{"class":313},[95,1363,1364],{"class":178}," 7",[95,1366,125],{"class":101},[95,1368,1369],{"class":97,"line":799},[95,1370,185],{"class":101},[95,1372,1373],{"class":97,"line":805},[95,1374,288],{"emptyLinePlaceholder":287},[95,1376,1377,1379,1381,1383],{"class":97,"line":814},[95,1378,293],{"class":208},[95,1380,1145],{"class":296},[95,1382,525],{"class":300},[95,1384,304],{"class":101},[95,1386,1387],{"class":97,"line":826},[95,1388,1389],{"class":593},"  \u002F\u002F 成功\n",[95,1391,1392,1395,1397,1399],{"class":97,"line":831},[95,1393,1394],{"class":353},"  SUCCESS",[95,1396,345],{"class":313},[95,1398,1164],{"class":178},[95,1400,125],{"class":101},[95,1402,1403],{"class":97,"line":837},[95,1404,1405],{"class":593},"  \u002F\u002F 失败\n",[95,1407,1408,1411,1413,1415],{"class":97,"line":846},[95,1409,1410],{"class":353},"  FAIL",[95,1412,345],{"class":313},[95,1414,1181],{"class":178},[95,1416,125],{"class":101},[95,1418,1419],{"class":97,"line":858},[95,1420,185],{"class":101},[95,1422,1423],{"class":97,"line":863},[95,1424,288],{"emptyLinePlaceholder":287},[95,1426,1427,1429,1431,1433],{"class":97,"line":869},[95,1428,293],{"class":208},[95,1430,1145],{"class":296},[95,1432,495],{"class":300},[95,1434,304],{"class":101},[95,1436,1437],{"class":97,"line":878},[95,1438,1439],{"class":593},"  \u002F\u002F h5\n",[95,1441,1442,1445,1447,1449,1452,1454],{"class":97,"line":890},[95,1443,1444],{"class":353},"  H5",[95,1446,345],{"class":313},[95,1448,141],{"class":140},[95,1450,1451],{"class":144},"H5",[95,1453,116],{"class":140},[95,1455,125],{"class":101},[95,1457,1458],{"class":97,"line":895},[95,1459,1460],{"class":593},"  \u002F\u002F pc\n",[95,1462,1463,1466,1468,1470,1473,1475],{"class":97,"line":901},[95,1464,1465],{"class":353},"  PC",[95,1467,345],{"class":313},[95,1469,141],{"class":140},[95,1471,1472],{"class":144},"PC",[95,1474,116],{"class":140},[95,1476,125],{"class":101},[95,1478,1479],{"class":97,"line":910},[95,1480,1481],{"class":593},"  \u002F\u002F 移动端\n",[95,1483,1484,1487,1489,1491,1494,1496],{"class":97,"line":922},[95,1485,1486],{"class":353},"  MOBILE",[95,1488,345],{"class":313},[95,1490,141],{"class":140},[95,1492,1493],{"class":144},"MOBILE",[95,1495,116],{"class":140},[95,1497,125],{"class":101},[95,1499,1500],{"class":97,"line":927},[95,1501,1502],{"class":593},"  \u002F\u002F 小程序\n",[95,1504,1505,1508,1510,1512,1515,1517],{"class":97,"line":933},[95,1506,1507],{"class":353},"  MINI_PROGRAM",[95,1509,345],{"class":313},[95,1511,141],{"class":140},[95,1513,1514],{"class":144},"MINI_PROGRAM",[95,1516,116],{"class":140},[95,1518,125],{"class":101},[95,1520,1521],{"class":97,"line":942},[95,1522,1154],{"class":593},[95,1524,1525,1527,1529,1531,1533,1535],{"class":97,"line":954},[95,1526,1159],{"class":353},[95,1528,345],{"class":313},[95,1530,141],{"class":140},[95,1532,354],{"class":144},[95,1534,116],{"class":140},[95,1536,125],{"class":101},[95,1538,1539],{"class":97,"line":959},[95,1540,185],{"class":101},[87,1542,1544],{"className":199,"code":1543,"language":201,"meta":9,"style":9},"import {\n  CallHandler,\n  ExecutionContext,\n  Injectable,\n  NestInterceptor,\n  StreamableFile,\n} from \"@nestjs\u002Fcommon\";\nimport { Reflector } from \"@nestjs\u002Fcore\";\nimport { Observable, tap } from \"rxjs\";\nimport { CommonService } from \"src\u002Fshared\u002Fcommon\u002Fcommon.service\";\nimport { LOG_KEY_METADATA } from \"..\u002Fconstants\u002Fmetadata.constant\";\nimport { LogOption } from \"..\u002Fdecorator\u002Flog.decorator\";\nimport { HttpResult } from \"..\u002Fclass\u002Fresult.class\";\nimport { DeviceSysCodeEnum } from \"..\u002Fenum\u002Fdevice.enum\";\nimport { LogStatusEnum } from \"..\u002Fenum\u002Flog.enum\";\nimport { AllExceptionFilter } from \"..\u002Ffilter\u002Fall-exception.filter\";\nimport { LogService } from \"src\u002Fshared\u002Flog\u002Flog.service\";\nimport { Log_Schema } from \"src\u002Fshared\u002Flog\u002Fschemas\u002Flog.schema\";\nimport { HttpStatusCode } from \"..\u002Fenum\u002Fhttp.enum\";\n\n@Injectable()\nexport class LogInterceptor implements NestInterceptor {\n  constructor(\n    private readonly reflector: Reflector,\n    private readonly commonService: CommonService,\n    private readonly logService: LogService,\n  ) {}\n  intercept(context: ExecutionContext, next: CallHandler): Observable\u003Cany> {\n    return next.handle().pipe(\n      tap({\n        next: (data) => {\n          return this.log(context, data);\n        },\n        error: (error) => {\n          const allExceptionFilter = new AllExceptionFilter();\n          const { result } = allExceptionFilter.errorResult(error);\n          return this.log(context, result);\n        },\n      }),\n    );\n  }\n\n  async log(context: ExecutionContext, data: HttpResult) {\n    const logOption = this.reflector.get\u003CLogOption>(\n      \u002F\u002F 可以看上一章路由守卫\n      LOG_KEY_METADATA,\n      context.getHandler(),\n    );\n    if (!logOption) return true;\n    const request = context.switchToHttp().getRequest();\n    const method = request.method.toUpperCase();\n    const logDto = new Log_Schema();\n    \u002F\u002F 模块标题\n    logDto.title = logOption.title;\n    \u002F\u002F 业务类型\n    logDto.businessType = logOption.businessType;\n    \u002F\u002F 请求平台code\n    logDto.platformCode = request.headers[\"platformCode\"] ?? DeviceSysCodeEnum.OTHER;\n    \u002F\u002F 项目code\n    logDto.projectCode = logOption.projectCode;\n    \u002F\u002F 请求方式\n    logDto.method = method;\n    \u002F\u002F 请求参数\n    logDto.requestParam = JSON.stringify({\n      params: request.params,\n      query: request.query,\n      body: request.body,\n    });\n    \u002F\u002F 请求地址\n    logDto.url = request.url;\n    \u002F\u002F 请求用户\n    logDto.operateUser = request?.user?.username ?? \"\";\n    \u002F\u002F 请求用户id\n    logDto.operateUserId = request?.user?._id ?? \"\";\n    \u002F\u002F 请求ip\n    logDto.ip = this.commonService.getIp(request);\n    \u002F\u002F 请求的地址\n    logDto.address = await this.commonService.getLocation(logDto.ip);\n    \u002F\u002F 操作时间\n    logDto.createTime = this.commonService.formatDate();\n    \u002F\u002F 成功的请求\n    if ((data && data.status === HttpStatusCode.OK) || data instanceof StreamableFile) {\n      \u002F\u002F如果是流，都算成功\n      logDto.status = LogStatusEnum.SUCCESS;\n    } else {\n      \u002F\u002F失败的请求\n      logDto.status = LogStatusEnum.FAIL;\n      logDto.errorMsg = data && data.message;\n    }\n    \u002F\u002F 这里自己写，就是将这条数据添加到数据库\n    await this.logService.create(logDto);\n  }\n}\n",[53,1545,1546,1552,1559,1566,1573,1580,1587,1602,1624,1651,1673,1693,1714,1736,1757,1777,1799,1821,1842,1864,1868,1877,1894,1902,1919,1934,1949,1957,1999,2020,2029,2047,2073,2078,2096,2115,2143,2165,2169,2178,2185,2190,2194,2222,2252,2257,2264,2278,2284,2307,2335,2360,2377,2382,2402,2407,2426,2431,2472,2477,2496,2501,2515,2520,2543,2559,2575,2592,2602,2608,2628,2634,2667,2673,2702,2708,2741,2747,2786,2792,2819,2825,2872,2878,2898,2908,2914,2934,2958,2964,2970,2996,3001],{"__ignoreMap":9},[95,1547,1548,1550],{"class":97,"line":98},[95,1549,209],{"class":208},[95,1551,304],{"class":101},[95,1553,1554,1557],{"class":97,"line":105},[95,1555,1556],{"class":215},"  CallHandler",[95,1558,125],{"class":101},[95,1560,1561,1564],{"class":97,"line":128},[95,1562,1563],{"class":215},"  ExecutionContext",[95,1565,125],{"class":101},[95,1567,1568,1571],{"class":97,"line":152},[95,1569,1570],{"class":215},"  Injectable",[95,1572,125],{"class":101},[95,1574,1575,1578],{"class":97,"line":167},[95,1576,1577],{"class":215},"  NestInterceptor",[95,1579,125],{"class":101},[95,1581,1582,1585],{"class":97,"line":182},[95,1583,1584],{"class":215},"  StreamableFile",[95,1586,125],{"class":101},[95,1588,1589,1592,1594,1596,1598,1600],{"class":97,"line":320},[95,1590,1591],{"class":101},"}",[95,1593,222],{"class":208},[95,1595,141],{"class":140},[95,1597,227],{"class":144},[95,1599,116],{"class":140},[95,1601,232],{"class":101},[95,1603,1604,1606,1608,1611,1613,1615,1617,1620,1622],{"class":97,"line":334},[95,1605,209],{"class":208},[95,1607,212],{"class":101},[95,1609,1610],{"class":215}," Reflector",[95,1612,219],{"class":101},[95,1614,222],{"class":208},[95,1616,141],{"class":140},[95,1618,1619],{"class":144},"@nestjs\u002Fcore",[95,1621,116],{"class":140},[95,1623,232],{"class":101},[95,1625,1626,1628,1630,1633,1635,1638,1640,1642,1644,1647,1649],{"class":97,"line":359},[95,1627,209],{"class":208},[95,1629,212],{"class":101},[95,1631,1632],{"class":215}," Observable",[95,1634,266],{"class":101},[95,1636,1637],{"class":215}," tap",[95,1639,219],{"class":101},[95,1641,222],{"class":208},[95,1643,141],{"class":140},[95,1645,1646],{"class":144},"rxjs",[95,1648,116],{"class":140},[95,1650,232],{"class":101},[95,1652,1653,1655,1657,1660,1662,1664,1666,1669,1671],{"class":97,"line":364},[95,1654,209],{"class":208},[95,1656,212],{"class":101},[95,1658,1659],{"class":215}," CommonService",[95,1661,219],{"class":101},[95,1663,222],{"class":208},[95,1665,141],{"class":140},[95,1667,1668],{"class":144},"src\u002Fshared\u002Fcommon\u002Fcommon.service",[95,1670,116],{"class":140},[95,1672,232],{"class":101},[95,1674,1675,1677,1679,1681,1683,1685,1687,1689,1691],{"class":97,"line":397},[95,1676,209],{"class":208},[95,1678,212],{"class":101},[95,1680,241],{"class":215},[95,1682,219],{"class":101},[95,1684,222],{"class":208},[95,1686,141],{"class":140},[95,1688,250],{"class":144},[95,1690,116],{"class":140},[95,1692,232],{"class":101},[95,1694,1695,1697,1699,1701,1703,1705,1707,1710,1712],{"class":97,"line":443},[95,1696,209],{"class":208},[95,1698,212],{"class":101},[95,1700,301],{"class":215},[95,1702,219],{"class":101},[95,1704,222],{"class":208},[95,1706,141],{"class":140},[95,1708,1709],{"class":144},"..\u002Fdecorator\u002Flog.decorator",[95,1711,116],{"class":140},[95,1713,232],{"class":101},[95,1715,1716,1718,1720,1723,1725,1727,1729,1732,1734],{"class":97,"line":621},[95,1717,209],{"class":208},[95,1719,212],{"class":101},[95,1721,1722],{"class":215}," HttpResult",[95,1724,219],{"class":101},[95,1726,222],{"class":208},[95,1728,141],{"class":140},[95,1730,1731],{"class":144},"..\u002Fclass\u002Fresult.class",[95,1733,116],{"class":140},[95,1735,232],{"class":101},[95,1737,1738,1740,1742,1744,1746,1748,1750,1753,1755],{"class":97,"line":627},[95,1739,209],{"class":208},[95,1741,212],{"class":101},[95,1743,495],{"class":215},[95,1745,219],{"class":101},[95,1747,222],{"class":208},[95,1749,141],{"class":140},[95,1751,1752],{"class":144},"..\u002Fenum\u002Fdevice.enum",[95,1754,116],{"class":140},[95,1756,232],{"class":101},[95,1758,1759,1761,1763,1765,1767,1769,1771,1773,1775],{"class":97,"line":655},[95,1760,209],{"class":208},[95,1762,212],{"class":101},[95,1764,525],{"class":215},[95,1766,219],{"class":101},[95,1768,222],{"class":208},[95,1770,141],{"class":140},[95,1772,278],{"class":144},[95,1774,116],{"class":140},[95,1776,232],{"class":101},[95,1778,1779,1781,1783,1786,1788,1790,1792,1795,1797],{"class":97,"line":667},[95,1780,209],{"class":208},[95,1782,212],{"class":101},[95,1784,1785],{"class":215}," AllExceptionFilter",[95,1787,219],{"class":101},[95,1789,222],{"class":208},[95,1791,141],{"class":140},[95,1793,1794],{"class":144},"..\u002Ffilter\u002Fall-exception.filter",[95,1796,116],{"class":140},[95,1798,232],{"class":101},[95,1800,1801,1803,1805,1808,1810,1812,1814,1817,1819],{"class":97,"line":672},[95,1802,209],{"class":208},[95,1804,212],{"class":101},[95,1806,1807],{"class":215}," LogService",[95,1809,219],{"class":101},[95,1811,222],{"class":208},[95,1813,141],{"class":140},[95,1815,1816],{"class":144},"src\u002Fshared\u002Flog\u002Flog.service",[95,1818,116],{"class":140},[95,1820,232],{"class":101},[95,1822,1823,1825,1827,1829,1831,1833,1835,1838,1840],{"class":97,"line":678},[95,1824,209],{"class":208},[95,1826,212],{"class":101},[95,1828,586],{"class":215},[95,1830,219],{"class":101},[95,1832,222],{"class":208},[95,1834,141],{"class":140},[95,1836,1837],{"class":144},"src\u002Fshared\u002Flog\u002Fschemas\u002Flog.schema",[95,1839,116],{"class":140},[95,1841,232],{"class":101},[95,1843,1844,1846,1848,1851,1853,1855,1857,1860,1862],{"class":97,"line":703},[95,1845,209],{"class":208},[95,1847,212],{"class":101},[95,1849,1850],{"class":215}," HttpStatusCode",[95,1852,219],{"class":101},[95,1854,222],{"class":208},[95,1856,141],{"class":140},[95,1858,1859],{"class":144},"..\u002Fenum\u002Fhttp.enum",[95,1861,116],{"class":140},[95,1863,232],{"class":101},[95,1865,1866],{"class":97,"line":715},[95,1867,288],{"emptyLinePlaceholder":287},[95,1869,1870,1872,1875],{"class":97,"line":720},[95,1871,571],{"class":101},[95,1873,1874],{"class":403},"Injectable",[95,1876,577],{"class":215},[95,1878,1879,1881,1883,1886,1889,1892],{"class":97,"line":726},[95,1880,293],{"class":208},[95,1882,297],{"class":296},[95,1884,1885],{"class":300}," LogInterceptor",[95,1887,1888],{"class":296}," implements",[95,1890,1891],{"class":300}," NestInterceptor",[95,1893,304],{"class":101},[95,1895,1896,1899],{"class":97,"line":751},[95,1897,1898],{"class":296},"  constructor",[95,1900,1901],{"class":101},"(\n",[95,1903,1904,1907,1910,1913,1915,1917],{"class":97,"line":762},[95,1905,1906],{"class":296},"    private",[95,1908,1909],{"class":296}," readonly",[95,1911,1912],{"class":381}," reflector",[95,1914,119],{"class":313},[95,1916,1610],{"class":300},[95,1918,125],{"class":101},[95,1920,1921,1923,1925,1928,1930,1932],{"class":97,"line":767},[95,1922,1906],{"class":296},[95,1924,1909],{"class":296},[95,1926,1927],{"class":381}," commonService",[95,1929,119],{"class":313},[95,1931,1659],{"class":300},[95,1933,125],{"class":101},[95,1935,1936,1938,1940,1943,1945,1947],{"class":97,"line":773},[95,1937,1906],{"class":296},[95,1939,1909],{"class":296},[95,1941,1942],{"class":381}," logService",[95,1944,119],{"class":313},[95,1946,1807],{"class":300},[95,1948,125],{"class":101},[95,1950,1951,1954],{"class":97,"line":782},[95,1952,1953],{"class":101},"  )",[95,1955,1956],{"class":101}," {}\n",[95,1958,1959,1963,1965,1967,1969,1972,1974,1977,1979,1982,1984,1986,1988,1991,1994,1997],{"class":97,"line":794},[95,1960,1962],{"class":1961},"sVXei","  intercept",[95,1964,407],{"class":101},[95,1966,157],{"class":381},[95,1968,119],{"class":313},[95,1970,1971],{"class":300}," ExecutionContext",[95,1973,266],{"class":101},[95,1975,1976],{"class":381}," next",[95,1978,119],{"class":313},[95,1980,1981],{"class":300}," CallHandler",[95,1983,389],{"class":101},[95,1985,119],{"class":313},[95,1987,1632],{"class":300},[95,1989,1990],{"class":101},"\u003C",[95,1992,1993],{"class":328},"any",[95,1995,1996],{"class":101},">",[95,1998,304],{"class":101},[95,2000,2001,2004,2006,2008,2011,2013,2015,2018],{"class":97,"line":799},[95,2002,2003],{"class":208},"    return",[95,2005,1976],{"class":215},[95,2007,350],{"class":101},[95,2009,2010],{"class":403},"handle",[95,2012,430],{"class":406},[95,2014,350],{"class":101},[95,2016,2017],{"class":403},"pipe",[95,2019,1901],{"class":406},[95,2021,2022,2025,2027],{"class":97,"line":805},[95,2023,2024],{"class":403},"      tap",[95,2026,407],{"class":406},[95,2028,102],{"class":101},[95,2030,2031,2034,2036,2038,2041,2043,2045],{"class":97,"line":814},[95,2032,2033],{"class":403},"        next",[95,2035,119],{"class":101},[95,2037,378],{"class":101},[95,2039,2040],{"class":381},"data",[95,2042,389],{"class":101},[95,2044,392],{"class":296},[95,2046,304],{"class":101},[95,2048,2049,2052,2055,2057,2060,2062,2064,2066,2069,2071],{"class":97,"line":826},[95,2050,2051],{"class":208},"          return",[95,2053,2054],{"class":108}," this",[95,2056,350],{"class":101},[95,2058,2059],{"class":403},"log",[95,2061,407],{"class":406},[95,2063,157],{"class":215},[95,2065,266],{"class":101},[95,2067,2068],{"class":215}," data",[95,2070,389],{"class":406},[95,2072,232],{"class":101},[95,2074,2075],{"class":97,"line":831},[95,2076,2077],{"class":101},"        },\n",[95,2079,2080,2083,2085,2087,2090,2092,2094],{"class":97,"line":837},[95,2081,2082],{"class":403},"        error",[95,2084,119],{"class":101},[95,2086,378],{"class":101},[95,2088,2089],{"class":381},"error",[95,2091,389],{"class":101},[95,2093,392],{"class":296},[95,2095,304],{"class":101},[95,2097,2098,2101,2104,2106,2109,2111,2113],{"class":97,"line":846},[95,2099,2100],{"class":296},"          const",[95,2102,2103],{"class":353}," allExceptionFilter",[95,2105,345],{"class":313},[95,2107,2108],{"class":313}," new",[95,2110,1785],{"class":403},[95,2112,430],{"class":406},[95,2114,232],{"class":101},[95,2116,2117,2119,2121,2124,2126,2128,2130,2132,2135,2137,2139,2141],{"class":97,"line":858},[95,2118,2100],{"class":296},[95,2120,212],{"class":101},[95,2122,2123],{"class":353}," result",[95,2125,219],{"class":101},[95,2127,345],{"class":313},[95,2129,2103],{"class":215},[95,2131,350],{"class":101},[95,2133,2134],{"class":403},"errorResult",[95,2136,407],{"class":406},[95,2138,2089],{"class":215},[95,2140,389],{"class":406},[95,2142,232],{"class":101},[95,2144,2145,2147,2149,2151,2153,2155,2157,2159,2161,2163],{"class":97,"line":863},[95,2146,2051],{"class":208},[95,2148,2054],{"class":108},[95,2150,350],{"class":101},[95,2152,2059],{"class":403},[95,2154,407],{"class":406},[95,2156,157],{"class":215},[95,2158,266],{"class":101},[95,2160,2123],{"class":215},[95,2162,389],{"class":406},[95,2164,232],{"class":101},[95,2166,2167],{"class":97,"line":869},[95,2168,2077],{"class":101},[95,2170,2171,2174,2176],{"class":97,"line":878},[95,2172,2173],{"class":101},"      }",[95,2175,389],{"class":406},[95,2177,125],{"class":101},[95,2179,2180,2183],{"class":97,"line":890},[95,2181,2182],{"class":406},"    )",[95,2184,232],{"class":101},[95,2186,2187],{"class":97,"line":895},[95,2188,2189],{"class":101},"  }\n",[95,2191,2192],{"class":97,"line":901},[95,2193,288],{"emptyLinePlaceholder":287},[95,2195,2196,2199,2202,2204,2206,2208,2210,2212,2214,2216,2218,2220],{"class":97,"line":910},[95,2197,2198],{"class":296},"  async",[95,2200,2201],{"class":1961}," log",[95,2203,407],{"class":101},[95,2205,157],{"class":381},[95,2207,119],{"class":313},[95,2209,1971],{"class":300},[95,2211,266],{"class":101},[95,2213,2068],{"class":381},[95,2215,119],{"class":313},[95,2217,1722],{"class":300},[95,2219,389],{"class":101},[95,2221,304],{"class":101},[95,2223,2224,2227,2229,2231,2233,2235,2238,2240,2243,2245,2248,2250],{"class":97,"line":922},[95,2225,2226],{"class":296},"    const",[95,2228,435],{"class":353},[95,2230,345],{"class":313},[95,2232,2054],{"class":108},[95,2234,350],{"class":101},[95,2236,2237],{"class":215},"reflector",[95,2239,350],{"class":101},[95,2241,2242],{"class":403},"get",[95,2244,1990],{"class":101},[95,2246,2247],{"class":300},"LogOption",[95,2249,1996],{"class":101},[95,2251,1901],{"class":406},[95,2253,2254],{"class":97,"line":927},[95,2255,2256],{"class":593},"      \u002F\u002F 可以看上一章路由守卫\n",[95,2258,2259,2262],{"class":97,"line":933},[95,2260,2261],{"class":353},"      LOG_KEY_METADATA",[95,2263,125],{"class":101},[95,2265,2266,2269,2271,2274,2276],{"class":97,"line":942},[95,2267,2268],{"class":215},"      context",[95,2270,350],{"class":101},[95,2272,2273],{"class":403},"getHandler",[95,2275,430],{"class":406},[95,2277,125],{"class":101},[95,2279,2280,2282],{"class":97,"line":954},[95,2281,2182],{"class":406},[95,2283,232],{"class":101},[95,2285,2286,2289,2291,2294,2296,2299,2302,2305],{"class":97,"line":959},[95,2287,2288],{"class":208},"    if",[95,2290,378],{"class":406},[95,2292,2293],{"class":313},"!",[95,2295,382],{"class":215},[95,2297,2298],{"class":406},") ",[95,2300,2301],{"class":208},"return",[95,2303,122],{"class":2304},"syTEX",[95,2306,232],{"class":101},[95,2308,2309,2311,2314,2316,2319,2321,2324,2326,2328,2331,2333],{"class":97,"line":965},[95,2310,2226],{"class":296},[95,2312,2313],{"class":353}," request",[95,2315,345],{"class":313},[95,2317,2318],{"class":215}," context",[95,2320,350],{"class":101},[95,2322,2323],{"class":403},"switchToHttp",[95,2325,430],{"class":406},[95,2327,350],{"class":101},[95,2329,2330],{"class":403},"getRequest",[95,2332,430],{"class":406},[95,2334,232],{"class":101},[95,2336,2337,2339,2342,2344,2346,2348,2351,2353,2356,2358],{"class":97,"line":991},[95,2338,2226],{"class":296},[95,2340,2341],{"class":353}," method",[95,2343,345],{"class":313},[95,2345,2313],{"class":215},[95,2347,350],{"class":101},[95,2349,2350],{"class":215},"method",[95,2352,350],{"class":101},[95,2354,2355],{"class":403},"toUpperCase",[95,2357,430],{"class":406},[95,2359,232],{"class":101},[95,2361,2362,2364,2367,2369,2371,2373,2375],{"class":97,"line":1003},[95,2363,2226],{"class":296},[95,2365,2366],{"class":353}," logDto",[95,2368,345],{"class":313},[95,2370,2108],{"class":313},[95,2372,586],{"class":403},[95,2374,430],{"class":406},[95,2376,232],{"class":101},[95,2378,2379],{"class":97,"line":1008},[95,2380,2381],{"class":593},"    \u002F\u002F 模块标题\n",[95,2383,2384,2387,2389,2392,2394,2396,2398,2400],{"class":97,"line":1014},[95,2385,2386],{"class":215},"    logDto",[95,2388,350],{"class":101},[95,2390,2391],{"class":215},"title",[95,2393,345],{"class":313},[95,2395,435],{"class":215},[95,2397,350],{"class":101},[95,2399,2391],{"class":215},[95,2401,232],{"class":101},[95,2403,2404],{"class":97,"line":1023},[95,2405,2406],{"class":593},"    \u002F\u002F 业务类型\n",[95,2408,2409,2411,2413,2416,2418,2420,2422,2424],{"class":97,"line":1035},[95,2410,2386],{"class":215},[95,2412,350],{"class":101},[95,2414,2415],{"class":215},"businessType",[95,2417,345],{"class":313},[95,2419,435],{"class":215},[95,2421,350],{"class":101},[95,2423,2415],{"class":215},[95,2425,232],{"class":101},[95,2427,2428],{"class":97,"line":1040},[95,2429,2430],{"class":593},"    \u002F\u002F 请求平台code\n",[95,2432,2433,2435,2437,2440,2442,2444,2446,2449,2452,2454,2456,2458,2461,2464,2466,2468,2470],{"class":97,"line":1046},[95,2434,2386],{"class":215},[95,2436,350],{"class":101},[95,2438,2439],{"class":215},"platformCode",[95,2441,345],{"class":313},[95,2443,2313],{"class":215},[95,2445,350],{"class":101},[95,2447,2448],{"class":215},"headers",[95,2450,2451],{"class":406},"[",[95,2453,116],{"class":140},[95,2455,2439],{"class":144},[95,2457,116],{"class":140},[95,2459,2460],{"class":406},"] ",[95,2462,2463],{"class":313},"??",[95,2465,495],{"class":215},[95,2467,350],{"class":101},[95,2469,354],{"class":353},[95,2471,232],{"class":101},[95,2473,2474],{"class":97,"line":1055},[95,2475,2476],{"class":593},"    \u002F\u002F 项目code\n",[95,2478,2479,2481,2483,2486,2488,2490,2492,2494],{"class":97,"line":1067},[95,2480,2386],{"class":215},[95,2482,350],{"class":101},[95,2484,2485],{"class":215},"projectCode",[95,2487,345],{"class":313},[95,2489,435],{"class":215},[95,2491,350],{"class":101},[95,2493,2485],{"class":215},[95,2495,232],{"class":101},[95,2497,2498],{"class":97,"line":1072},[95,2499,2500],{"class":593},"    \u002F\u002F 请求方式\n",[95,2502,2503,2505,2507,2509,2511,2513],{"class":97,"line":1078},[95,2504,2386],{"class":215},[95,2506,350],{"class":101},[95,2508,2350],{"class":215},[95,2510,345],{"class":313},[95,2512,2341],{"class":215},[95,2514,232],{"class":101},[95,2516,2517],{"class":97,"line":1087},[95,2518,2519],{"class":593},"    \u002F\u002F 请求参数\n",[95,2521,2522,2524,2526,2529,2531,2534,2536,2539,2541],{"class":97,"line":1099},[95,2523,2386],{"class":215},[95,2525,350],{"class":101},[95,2527,2528],{"class":215},"requestParam",[95,2530,345],{"class":313},[95,2532,2533],{"class":353}," JSON",[95,2535,350],{"class":101},[95,2537,2538],{"class":403},"stringify",[95,2540,407],{"class":406},[95,2542,102],{"class":101},[95,2544,2545,2548,2550,2552,2554,2557],{"class":97,"line":1104},[95,2546,2547],{"class":406},"      params",[95,2549,119],{"class":101},[95,2551,2313],{"class":215},[95,2553,350],{"class":101},[95,2555,2556],{"class":215},"params",[95,2558,125],{"class":101},[95,2560,2561,2564,2566,2568,2570,2573],{"class":97,"line":1109},[95,2562,2563],{"class":406},"      query",[95,2565,119],{"class":101},[95,2567,2313],{"class":215},[95,2569,350],{"class":101},[95,2571,2572],{"class":215},"query",[95,2574,125],{"class":101},[95,2576,2578,2581,2583,2585,2587,2590],{"class":97,"line":2577},67,[95,2579,2580],{"class":406},"      body",[95,2582,119],{"class":101},[95,2584,2313],{"class":215},[95,2586,350],{"class":101},[95,2588,2589],{"class":215},"body",[95,2591,125],{"class":101},[95,2593,2595,2598,2600],{"class":97,"line":2594},68,[95,2596,2597],{"class":101},"    }",[95,2599,389],{"class":406},[95,2601,232],{"class":101},[95,2603,2605],{"class":97,"line":2604},69,[95,2606,2607],{"class":593},"    \u002F\u002F 请求地址\n",[95,2609,2611,2613,2615,2618,2620,2622,2624,2626],{"class":97,"line":2610},70,[95,2612,2386],{"class":215},[95,2614,350],{"class":101},[95,2616,2617],{"class":215},"url",[95,2619,345],{"class":313},[95,2621,2313],{"class":215},[95,2623,350],{"class":101},[95,2625,2617],{"class":215},[95,2627,232],{"class":101},[95,2629,2631],{"class":97,"line":2630},71,[95,2632,2633],{"class":593},"    \u002F\u002F 请求用户\n",[95,2635,2637,2639,2641,2644,2646,2648,2651,2654,2656,2659,2662,2665],{"class":97,"line":2636},72,[95,2638,2386],{"class":215},[95,2640,350],{"class":101},[95,2642,2643],{"class":215},"operateUser",[95,2645,345],{"class":313},[95,2647,2313],{"class":215},[95,2649,2650],{"class":101},"?.",[95,2652,2653],{"class":215},"user",[95,2655,2650],{"class":101},[95,2657,2658],{"class":215},"username",[95,2660,2661],{"class":313}," ??",[95,2663,2664],{"class":140}," \"\"",[95,2666,232],{"class":101},[95,2668,2670],{"class":97,"line":2669},73,[95,2671,2672],{"class":593},"    \u002F\u002F 请求用户id\n",[95,2674,2676,2678,2680,2683,2685,2687,2689,2691,2693,2696,2698,2700],{"class":97,"line":2675},74,[95,2677,2386],{"class":215},[95,2679,350],{"class":101},[95,2681,2682],{"class":215},"operateUserId",[95,2684,345],{"class":313},[95,2686,2313],{"class":215},[95,2688,2650],{"class":101},[95,2690,2653],{"class":215},[95,2692,2650],{"class":101},[95,2694,2695],{"class":215},"_id",[95,2697,2661],{"class":313},[95,2699,2664],{"class":140},[95,2701,232],{"class":101},[95,2703,2705],{"class":97,"line":2704},75,[95,2706,2707],{"class":593},"    \u002F\u002F 请求ip\n",[95,2709,2711,2713,2715,2718,2720,2722,2724,2727,2729,2732,2734,2737,2739],{"class":97,"line":2710},76,[95,2712,2386],{"class":215},[95,2714,350],{"class":101},[95,2716,2717],{"class":215},"ip",[95,2719,345],{"class":313},[95,2721,2054],{"class":108},[95,2723,350],{"class":101},[95,2725,2726],{"class":215},"commonService",[95,2728,350],{"class":101},[95,2730,2731],{"class":403},"getIp",[95,2733,407],{"class":406},[95,2735,2736],{"class":215},"request",[95,2738,389],{"class":406},[95,2740,232],{"class":101},[95,2742,2744],{"class":97,"line":2743},77,[95,2745,2746],{"class":593},"    \u002F\u002F 请求的地址\n",[95,2748,2750,2752,2754,2757,2759,2762,2764,2766,2768,2770,2773,2775,2778,2780,2782,2784],{"class":97,"line":2749},78,[95,2751,2386],{"class":215},[95,2753,350],{"class":101},[95,2755,2756],{"class":215},"address",[95,2758,345],{"class":313},[95,2760,2761],{"class":208}," await",[95,2763,2054],{"class":108},[95,2765,350],{"class":101},[95,2767,2726],{"class":215},[95,2769,350],{"class":101},[95,2771,2772],{"class":403},"getLocation",[95,2774,407],{"class":406},[95,2776,2777],{"class":215},"logDto",[95,2779,350],{"class":101},[95,2781,2717],{"class":215},[95,2783,389],{"class":406},[95,2785,232],{"class":101},[95,2787,2789],{"class":97,"line":2788},79,[95,2790,2791],{"class":593},"    \u002F\u002F 操作时间\n",[95,2793,2795,2797,2799,2802,2804,2806,2808,2810,2812,2815,2817],{"class":97,"line":2794},80,[95,2796,2386],{"class":215},[95,2798,350],{"class":101},[95,2800,2801],{"class":215},"createTime",[95,2803,345],{"class":313},[95,2805,2054],{"class":108},[95,2807,350],{"class":101},[95,2809,2726],{"class":215},[95,2811,350],{"class":101},[95,2813,2814],{"class":403},"formatDate",[95,2816,430],{"class":406},[95,2818,232],{"class":101},[95,2820,2822],{"class":97,"line":2821},81,[95,2823,2824],{"class":593},"    \u002F\u002F 成功的请求\n",[95,2826,2828,2830,2833,2835,2838,2840,2842,2845,2848,2850,2852,2855,2857,2860,2862,2865,2868,2870],{"class":97,"line":2827},82,[95,2829,2288],{"class":208},[95,2831,2832],{"class":406}," ((",[95,2834,2040],{"class":215},[95,2836,2837],{"class":313}," &&",[95,2839,2068],{"class":215},[95,2841,350],{"class":101},[95,2843,2844],{"class":215},"status",[95,2846,2847],{"class":313}," ===",[95,2849,1850],{"class":215},[95,2851,350],{"class":101},[95,2853,2854],{"class":353},"OK",[95,2856,2298],{"class":406},[95,2858,2859],{"class":313},"||",[95,2861,2068],{"class":215},[95,2863,2864],{"class":313}," instanceof",[95,2866,2867],{"class":300}," StreamableFile",[95,2869,2298],{"class":406},[95,2871,102],{"class":101},[95,2873,2875],{"class":97,"line":2874},83,[95,2876,2877],{"class":593},"      \u002F\u002F如果是流，都算成功\n",[95,2879,2881,2884,2886,2888,2890,2892,2894,2896],{"class":97,"line":2880},84,[95,2882,2883],{"class":215},"      logDto",[95,2885,350],{"class":101},[95,2887,2844],{"class":215},[95,2889,345],{"class":313},[95,2891,525],{"class":215},[95,2893,350],{"class":101},[95,2895,984],{"class":353},[95,2897,232],{"class":101},[95,2899,2901,2903,2906],{"class":97,"line":2900},85,[95,2902,2597],{"class":101},[95,2904,2905],{"class":208}," else",[95,2907,304],{"class":101},[95,2909,2911],{"class":97,"line":2910},86,[95,2912,2913],{"class":593},"      \u002F\u002F失败的请求\n",[95,2915,2917,2919,2921,2923,2925,2927,2929,2932],{"class":97,"line":2916},87,[95,2918,2883],{"class":215},[95,2920,350],{"class":101},[95,2922,2844],{"class":215},[95,2924,345],{"class":313},[95,2926,525],{"class":215},[95,2928,350],{"class":101},[95,2930,2931],{"class":353},"FAIL",[95,2933,232],{"class":101},[95,2935,2937,2939,2941,2944,2946,2948,2950,2952,2954,2956],{"class":97,"line":2936},88,[95,2938,2883],{"class":215},[95,2940,350],{"class":101},[95,2942,2943],{"class":215},"errorMsg",[95,2945,345],{"class":313},[95,2947,2068],{"class":215},[95,2949,2837],{"class":313},[95,2951,2068],{"class":215},[95,2953,350],{"class":101},[95,2955,133],{"class":215},[95,2957,232],{"class":101},[95,2959,2961],{"class":97,"line":2960},89,[95,2962,2963],{"class":101},"    }\n",[95,2965,2967],{"class":97,"line":2966},90,[95,2968,2969],{"class":593},"    \u002F\u002F 这里自己写，就是将这条数据添加到数据库\n",[95,2971,2973,2976,2978,2980,2983,2985,2988,2990,2992,2994],{"class":97,"line":2972},91,[95,2974,2975],{"class":208},"    await",[95,2977,2054],{"class":108},[95,2979,350],{"class":101},[95,2981,2982],{"class":215},"logService",[95,2984,350],{"class":101},[95,2986,2987],{"class":403},"create",[95,2989,407],{"class":406},[95,2991,2777],{"class":215},[95,2993,389],{"class":406},[95,2995,232],{"class":101},[95,2997,2999],{"class":97,"line":2998},92,[95,3000,2189],{"class":101},[95,3002,3004],{"class":97,"line":3003},93,[95,3005,185],{"class":101},[194,3007,3008],{"id":3008},"注册",[26,3010,3011,3012,3015],{},"在 ",[53,3013,3014],{},"app.module.ts","中:",[87,3017,3019],{"className":199,"code":3018,"language":201,"meta":9,"style":9},"@Module({\n  providers: [\n    {\n      provide: APP_INTERCEPTOR,\n      useClass: LogInterceptor,\n    },\n  ],\n})\n",[53,3020,3021,3032,3042,3047,3059,3070,3075,3082],{"__ignoreMap":9},[95,3022,3023,3025,3028,3030],{"class":97,"line":98},[95,3024,571],{"class":101},[95,3026,3027],{"class":403},"Module",[95,3029,407],{"class":215},[95,3031,102],{"class":101},[95,3033,3034,3037,3039],{"class":97,"line":105},[95,3035,3036],{"class":406},"  providers",[95,3038,119],{"class":101},[95,3040,3041],{"class":215}," [\n",[95,3043,3044],{"class":97,"line":128},[95,3045,3046],{"class":101},"    {\n",[95,3048,3049,3052,3054,3057],{"class":97,"line":152},[95,3050,3051],{"class":406},"      provide",[95,3053,119],{"class":101},[95,3055,3056],{"class":353}," APP_INTERCEPTOR",[95,3058,125],{"class":101},[95,3060,3061,3064,3066,3068],{"class":97,"line":167},[95,3062,3063],{"class":406},"      useClass",[95,3065,119],{"class":101},[95,3067,1885],{"class":215},[95,3069,125],{"class":101},[95,3071,3072],{"class":97,"line":182},[95,3073,3074],{"class":101},"    },\n",[95,3076,3077,3080],{"class":97,"line":320},[95,3078,3079],{"class":215},"  ]",[95,3081,125],{"class":101},[95,3083,3084,3086],{"class":97,"line":334},[95,3085,1591],{"class":101},[95,3087,652],{"class":215},[194,3089,3090],{"id":3090},"控制层使用",[87,3092,3094],{"className":199,"code":3093,"language":201,"meta":9,"style":9},"import { Controller, Post, Body, Get, Request } from \"@nestjs\u002Fcommon\";\nexport class UserController {\n  constructor() {}\n\n  \u002F\u002F 添加这一行代码\n  @Log({\n    title: \"添加用户\",\n    projectCode: LogProductEnum.ADMIN,\n  })\n  @Post(\"create\")\n  async create(@Body() body: { username: string; password: string }) {\n    return \"success\";\n  }\n}\n",[53,3095,3096,3137,3148,3156,3160,3165,3176,3192,3208,3215,3232,3276,3288,3292],{"__ignoreMap":9},[95,3097,3098,3100,3102,3105,3107,3110,3112,3115,3117,3120,3122,3125,3127,3129,3131,3133,3135],{"class":97,"line":98},[95,3099,209],{"class":208},[95,3101,212],{"class":101},[95,3103,3104],{"class":215}," Controller",[95,3106,266],{"class":101},[95,3108,3109],{"class":215}," Post",[95,3111,266],{"class":101},[95,3113,3114],{"class":215}," Body",[95,3116,266],{"class":101},[95,3118,3119],{"class":215}," Get",[95,3121,266],{"class":101},[95,3123,3124],{"class":215}," Request",[95,3126,219],{"class":101},[95,3128,222],{"class":208},[95,3130,141],{"class":140},[95,3132,227],{"class":144},[95,3134,116],{"class":140},[95,3136,232],{"class":101},[95,3138,3139,3141,3143,3146],{"class":97,"line":105},[95,3140,293],{"class":208},[95,3142,297],{"class":296},[95,3144,3145],{"class":300}," UserController",[95,3147,304],{"class":101},[95,3149,3150,3152,3154],{"class":97,"line":128},[95,3151,1898],{"class":296},[95,3153,430],{"class":101},[95,3155,1956],{"class":101},[95,3157,3158],{"class":97,"line":152},[95,3159,288],{"emptyLinePlaceholder":287},[95,3161,3162],{"class":97,"line":167},[95,3163,3164],{"class":593},"  \u002F\u002F 添加这一行代码\n",[95,3166,3167,3169,3172,3174],{"class":97,"line":182},[95,3168,599],{"class":101},[95,3170,3171],{"class":403},"Log",[95,3173,407],{"class":215},[95,3175,102],{"class":101},[95,3177,3178,3181,3183,3185,3188,3190],{"class":97,"line":320},[95,3179,3180],{"class":406},"    title",[95,3182,119],{"class":101},[95,3184,141],{"class":140},[95,3186,3187],{"class":144},"添加用户",[95,3189,116],{"class":140},[95,3191,125],{"class":101},[95,3193,3194,3197,3199,3201,3203,3206],{"class":97,"line":334},[95,3195,3196],{"class":406},"    projectCode",[95,3198,119],{"class":101},[95,3200,269],{"class":215},[95,3202,350],{"class":101},[95,3204,3205],{"class":353},"ADMIN",[95,3207,125],{"class":101},[95,3209,3210,3213],{"class":97,"line":359},[95,3211,3212],{"class":101},"  }",[95,3214,652],{"class":215},[95,3216,3217,3219,3222,3224,3226,3228,3230],{"class":97,"line":364},[95,3218,599],{"class":101},[95,3220,3221],{"class":403},"Post",[95,3223,407],{"class":215},[95,3225,116],{"class":140},[95,3227,2987],{"class":144},[95,3229,116],{"class":140},[95,3231,652],{"class":215},[95,3233,3234,3236,3239,3242,3245,3248,3250,3252,3254,3257,3259,3261,3264,3267,3269,3271,3274],{"class":97,"line":397},[95,3235,2198],{"class":296},[95,3237,3238],{"class":1961}," create",[95,3240,3241],{"class":101},"(@",[95,3243,3244],{"class":403},"Body",[95,3246,3247],{"class":215},"() ",[95,3249,2589],{"class":381},[95,3251,119],{"class":313},[95,3253,212],{"class":101},[95,3255,3256],{"class":309}," username",[95,3258,119],{"class":313},[95,3260,329],{"class":328},[95,3262,3263],{"class":101},";",[95,3265,3266],{"class":309}," password",[95,3268,119],{"class":313},[95,3270,329],{"class":328},[95,3272,3273],{"class":101}," })",[95,3275,304],{"class":101},[95,3277,3278,3280,3282,3284,3286],{"class":97,"line":443},[95,3279,2003],{"class":208},[95,3281,141],{"class":140},[95,3283,113],{"class":144},[95,3285,116],{"class":140},[95,3287,232],{"class":101},[95,3289,3290],{"class":97,"line":621},[95,3291,2189],{"class":101},[95,3293,3294],{"class":97,"line":627},[95,3295,185],{"class":101},[190,3297,3298],{"id":3298},"拦截器",[194,3300,3301],{"id":3301},"拦截器代码",[87,3303,3305],{"className":199,"code":3304,"language":201,"meta":9,"style":9},"import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from \"@nestjs\u002Fcommon\";\nimport { map, Observable, tap } from \"rxjs\";\nimport { HttpResult } from \"..\u002Fclass\u002Fresult.class\";\n\n@Injectable()\nexport class InterceptorInterceptor implements NestInterceptor {\n  intercept(context: ExecutionContext, next: CallHandler): Observable\u003Cany> {\n    const request = context.switchToHttp().getRequest();\n    return next.handle().pipe(\n      tap(() => {\n        console.log(request);\n      }),\n      map((data) => {\n        return HttpResult.success(data?.context ?? data, data?.message ?? \"操作成功\");\n      }),\n    );\n  }\n}\n",[53,3306,3307,3340,3369,3389,3393,3401,3416,3450,3474,3492,3504,3521,3529,3546,3589,3597,3603,3607],{"__ignoreMap":9},[95,3308,3309,3311,3313,3315,3317,3319,3321,3324,3326,3328,3330,3332,3334,3336,3338],{"class":97,"line":98},[95,3310,209],{"class":208},[95,3312,212],{"class":101},[95,3314,1981],{"class":215},[95,3316,266],{"class":101},[95,3318,1971],{"class":215},[95,3320,266],{"class":101},[95,3322,3323],{"class":215}," Injectable",[95,3325,266],{"class":101},[95,3327,1891],{"class":215},[95,3329,219],{"class":101},[95,3331,222],{"class":208},[95,3333,141],{"class":140},[95,3335,227],{"class":144},[95,3337,116],{"class":140},[95,3339,232],{"class":101},[95,3341,3342,3344,3346,3349,3351,3353,3355,3357,3359,3361,3363,3365,3367],{"class":97,"line":105},[95,3343,209],{"class":208},[95,3345,212],{"class":101},[95,3347,3348],{"class":215}," map",[95,3350,266],{"class":101},[95,3352,1632],{"class":215},[95,3354,266],{"class":101},[95,3356,1637],{"class":215},[95,3358,219],{"class":101},[95,3360,222],{"class":208},[95,3362,141],{"class":140},[95,3364,1646],{"class":144},[95,3366,116],{"class":140},[95,3368,232],{"class":101},[95,3370,3371,3373,3375,3377,3379,3381,3383,3385,3387],{"class":97,"line":128},[95,3372,209],{"class":208},[95,3374,212],{"class":101},[95,3376,1722],{"class":215},[95,3378,219],{"class":101},[95,3380,222],{"class":208},[95,3382,141],{"class":140},[95,3384,1731],{"class":144},[95,3386,116],{"class":140},[95,3388,232],{"class":101},[95,3390,3391],{"class":97,"line":152},[95,3392,288],{"emptyLinePlaceholder":287},[95,3394,3395,3397,3399],{"class":97,"line":167},[95,3396,571],{"class":101},[95,3398,1874],{"class":403},[95,3400,577],{"class":215},[95,3402,3403,3405,3407,3410,3412,3414],{"class":97,"line":182},[95,3404,293],{"class":208},[95,3406,297],{"class":296},[95,3408,3409],{"class":300}," InterceptorInterceptor",[95,3411,1888],{"class":296},[95,3413,1891],{"class":300},[95,3415,304],{"class":101},[95,3417,3418,3420,3422,3424,3426,3428,3430,3432,3434,3436,3438,3440,3442,3444,3446,3448],{"class":97,"line":320},[95,3419,1962],{"class":1961},[95,3421,407],{"class":101},[95,3423,157],{"class":381},[95,3425,119],{"class":313},[95,3427,1971],{"class":300},[95,3429,266],{"class":101},[95,3431,1976],{"class":381},[95,3433,119],{"class":313},[95,3435,1981],{"class":300},[95,3437,389],{"class":101},[95,3439,119],{"class":313},[95,3441,1632],{"class":300},[95,3443,1990],{"class":101},[95,3445,1993],{"class":328},[95,3447,1996],{"class":101},[95,3449,304],{"class":101},[95,3451,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470,3472],{"class":97,"line":334},[95,3453,2226],{"class":296},[95,3455,2313],{"class":353},[95,3457,345],{"class":313},[95,3459,2318],{"class":215},[95,3461,350],{"class":101},[95,3463,2323],{"class":403},[95,3465,430],{"class":406},[95,3467,350],{"class":101},[95,3469,2330],{"class":403},[95,3471,430],{"class":406},[95,3473,232],{"class":101},[95,3475,3476,3478,3480,3482,3484,3486,3488,3490],{"class":97,"line":359},[95,3477,2003],{"class":208},[95,3479,1976],{"class":215},[95,3481,350],{"class":101},[95,3483,2010],{"class":403},[95,3485,430],{"class":406},[95,3487,350],{"class":101},[95,3489,2017],{"class":403},[95,3491,1901],{"class":406},[95,3493,3494,3496,3498,3500,3502],{"class":97,"line":364},[95,3495,2024],{"class":403},[95,3497,407],{"class":406},[95,3499,430],{"class":101},[95,3501,392],{"class":296},[95,3503,304],{"class":101},[95,3505,3506,3509,3511,3513,3515,3517,3519],{"class":97,"line":397},[95,3507,3508],{"class":215},"        console",[95,3510,350],{"class":101},[95,3512,2059],{"class":403},[95,3514,407],{"class":406},[95,3516,2736],{"class":215},[95,3518,389],{"class":406},[95,3520,232],{"class":101},[95,3522,3523,3525,3527],{"class":97,"line":443},[95,3524,2173],{"class":101},[95,3526,389],{"class":406},[95,3528,125],{"class":101},[95,3530,3531,3534,3536,3538,3540,3542,3544],{"class":97,"line":621},[95,3532,3533],{"class":403},"      map",[95,3535,407],{"class":406},[95,3537,407],{"class":101},[95,3539,2040],{"class":381},[95,3541,389],{"class":101},[95,3543,392],{"class":296},[95,3545,304],{"class":101},[95,3547,3548,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3585,3587],{"class":97,"line":627},[95,3549,3550],{"class":208},"        return",[95,3552,1722],{"class":215},[95,3554,350],{"class":101},[95,3556,113],{"class":403},[95,3558,407],{"class":406},[95,3560,2040],{"class":215},[95,3562,2650],{"class":101},[95,3564,157],{"class":215},[95,3566,2661],{"class":313},[95,3568,2068],{"class":215},[95,3570,266],{"class":101},[95,3572,2068],{"class":215},[95,3574,2650],{"class":101},[95,3576,133],{"class":215},[95,3578,2661],{"class":313},[95,3580,141],{"class":140},[95,3582,145],{"class":144},[95,3584,116],{"class":140},[95,3586,389],{"class":406},[95,3588,232],{"class":101},[95,3590,3591,3593,3595],{"class":97,"line":655},[95,3592,2173],{"class":101},[95,3594,389],{"class":406},[95,3596,125],{"class":101},[95,3598,3599,3601],{"class":97,"line":667},[95,3600,2182],{"class":406},[95,3602,232],{"class":101},[95,3604,3605],{"class":97,"line":672},[95,3606,2189],{"class":101},[95,3608,3609],{"class":97,"line":678},[95,3610,185],{"class":101},[194,3612,3008],{"id":3613},"注册-1",[26,3615,3011,3616,3015],{},[53,3617,3014],{},[87,3619,3621],{"className":199,"code":3620,"language":201,"meta":9,"style":9},"@Module({\n  providers: [\n    {\n      provide: APP_INTERCEPTOR,\n      useClass: InterceptorInterceptor,\n    },\n  ],\n})\n",[53,3622,3623,3633,3641,3645,3655,3665,3669,3675],{"__ignoreMap":9},[95,3624,3625,3627,3629,3631],{"class":97,"line":98},[95,3626,571],{"class":101},[95,3628,3027],{"class":403},[95,3630,407],{"class":215},[95,3632,102],{"class":101},[95,3634,3635,3637,3639],{"class":97,"line":105},[95,3636,3036],{"class":406},[95,3638,119],{"class":101},[95,3640,3041],{"class":215},[95,3642,3643],{"class":97,"line":128},[95,3644,3046],{"class":101},[95,3646,3647,3649,3651,3653],{"class":97,"line":152},[95,3648,3051],{"class":406},[95,3650,119],{"class":101},[95,3652,3056],{"class":353},[95,3654,125],{"class":101},[95,3656,3657,3659,3661,3663],{"class":97,"line":167},[95,3658,3063],{"class":406},[95,3660,119],{"class":101},[95,3662,3409],{"class":215},[95,3664,125],{"class":101},[95,3666,3667],{"class":97,"line":182},[95,3668,3074],{"class":101},[95,3670,3671,3673],{"class":97,"line":320},[95,3672,3079],{"class":215},[95,3674,125],{"class":101},[95,3676,3677,3679],{"class":97,"line":334},[95,3678,1591],{"class":101},[95,3680,652],{"class":215},[3682,3683],"hr",{},[190,3685,3686],{"id":3686},"关联文档",[3688,3689,3690,3699,3705],"ol",{},[68,3691,3692,3698],{},[34,3693,3695,3696],{"href":3694},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fnext#%E5%B8%B8%E9%87%8F%E6%96%87%E4%BB%B6","常量 ",[53,3697,410],{},"（路由守卫一章）",[68,3700,3701],{},[34,3702,3704],{"href":3703},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fexce#%E5%BC%82%E5%B8%B8%E8%BF%87%E6%BB%A4%E5%99%A8","全局异常过滤器",[68,3706,3707,3714,3715,3718,3719,3721],{},[34,3708,3710,3711],{"href":3709},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fexce#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BC%82%E5%B8%B8","统一响应 ",[53,3712,3713],{},"HttpResult","（与 ",[53,3716,3717],{},"exce"," 一章中的 ",[53,3720,3713],{}," 类一致）",[190,3723,3724],{"id":3724},"参考文献",[3726,3727,3728,3741],"table",{},[3729,3730,3731],"thead",{},[3732,3733,3734,3738],"tr",{},[3735,3736,3737],"th",{},"资料",[3735,3739,3740],{},"说明",[3742,3743,3744,3758,3772],"tbody",{},[3732,3745,3746,3755],{},[3747,3748,3749],"td",{},[34,3750,3754],{"href":3751,"rel":3752},"https:\u002F\u002Fdocs.nestjs.com\u002Finterceptors",[3753],"nofollow","Interceptors",[3747,3756,3757],{},"官方",[3732,3759,3760,3767],{},[3747,3761,3762],{},[34,3763,3766],{"href":3764,"rel":3765},"https:\u002F\u002Fdocs.nestjs.com\u002Fcustom-decorators",[3753],"Custom decorators",[3747,3768,3769],{},[53,3770,3771],{},"SetMetadata",[3732,3773,3774,3781],{},[3747,3775,3776],{},[34,3777,3780],{"href":3778,"rel":3779},"https:\u002F\u002Fdocs.nestjs.com\u002Ffundamentals\u002Fexecution-context",[3753],"Execution context",[3747,3782,3783],{},[53,3784,3785],{},"Reflector",[3787,3788,3789],"style",{},"html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sseR_, html code.shiki .sseR_{--shiki-light:#9C3EDA;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .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 .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 .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .sucvu, html code.shiki .sucvu{--shiki-light:#E53935;--shiki-default:#E36209;--shiki-dark:#FFAB70}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 .sfCm-, html code.shiki .sfCm-{--shiki-light:#90A4AE;--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 .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}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 .sVXei, html code.shiki .sVXei{--shiki-light:#E53935;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":9,"searchDepth":105,"depth":105,"links":3791},[3792,3799,3803,3804],{"id":192,"depth":105,"text":192,"children":3793},[3794,3795,3796,3797,3798],{"id":196,"depth":128,"text":196},{"id":449,"depth":128,"text":449},{"id":1133,"depth":128,"text":1133},{"id":3008,"depth":128,"text":3008},{"id":3090,"depth":128,"text":3090},{"id":3298,"depth":105,"text":3298,"children":3800},[3801,3802],{"id":3301,"depth":128,"text":3301},{"id":3613,"depth":128,"text":3008},{"id":3686,"depth":105,"text":3686},{"id":3724,"depth":105,"text":3724},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fend\u002FNestJS\u002Fbefore\u002FInjectable","knowledge\u002Fknowledge\u002Fbooklet\u002Fend\u002FNestJS\u002Fbefore\u002FInjectable.md","md",{"items":3810},[3811,3814,3817,3820,3824,3826],{"path":3812,"title":3813,"description":9,"category":10,"score":182},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fexce","异常处理器",{"path":3815,"title":3816,"description":9,"category":10,"score":182},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fenv","环境加载",{"path":3818,"title":3819,"description":9,"category":10,"score":182},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fdatabase","数据库的配置",{"path":3821,"title":3822,"description":3823,"category":10,"score":182},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finfo","归档说明（before\u002F）","本目录（before\u002F）为早期 NestJS 实战笔记：以完整业务片段（守卫、拦截器、MongoDB、JWT 等）为主，写法与文件命名不统一。新项目请跟 new\u002F 主线，技术细节以 docs.nestjs.com 为准。",{"path":46,"title":3825,"description":9,"category":10,"score":182},"统一响应格式拦截器",{"path":3827,"title":3828,"description":9,"category":10,"score":182},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fnext","路由守卫",{"series":3830,"title":3831,"items":3832,"index":167,"prev":3862,"next":3863},"booklet\u002Fend\u002Fnestjs\u002Fbefore","before",[3833,3835,3839,3841,3843,3845,3846,3848,3852,3856,3858],{"path":3818,"title":3819,"date":3834,"pinned":15},"2024-06-22",{"path":3836,"title":3837,"date":3838,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fdemo","入手Demo","2022-10-15",{"path":3815,"title":3816,"date":3840,"pinned":15},"2024-09-01",{"path":3812,"title":3813,"date":3842,"pinned":15},"2026-03-17",{"path":3821,"title":3822,"date":3844,"pinned":15},"2023-08-31",{"path":7,"title":8,"date":14,"pinned":15},{"path":46,"title":3825,"date":3847,"pinned":15},"2023-08-17",{"path":3849,"title":3850,"date":3851,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fjwt","JWT 与 Passport 授权","2021-08-10",{"path":3853,"title":3854,"date":3855,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fmi","Nest 中间件","2022-06-21",{"path":3827,"title":3828,"date":3857,"pinned":15},"2022-12-01",{"path":3859,"title":3860,"date":3861,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fother","其他配置","2022-05-23",{"path":3821,"title":3822,"date":3844,"pinned":15},{"path":46,"title":3825,"date":3847,"pinned":15}]