[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fenv":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fenv":849,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fenv":870},{"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":845,"stem":846,"id":847,"extension":848},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fenv","环境加载","","技能小册",[12,13],"nestjs","env","2024-09-01",false,{"type":17,"value":18,"toc":837},"minimark",[19,22,44,55,62,66,77,108,111,121,124,146,261,264,273,280,426,433,436,442,609,620,768,783,786,833],[20,21,8],"h1",{"id":8},[23,24,25],"blockquote",{},[26,27,28,32,33,38,39,43],"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\u002Fbase","new\u002F 主线","。",[26,45,46,47,51,52,54],{},"前俩篇讲解了快速入门",[48,49,50],"code",{},"nest","，接下来大致介绍一下",[48,53,50],{},"项目如何进行改造；",[26,56,57,58,61],{},"项目中一般都会用到",[48,59,60],{},"中间件，拦截器，参数管道校验等等","，接下来分多个方向大致介绍这些如何在项目中使用；",[63,64,65],"h2",{"id":65},"项目改造",[26,67,68,69,72,73,76],{},"类似于",[48,70,71],{},"vue","项目，有一些成熟的方案去管理你的项目，",[48,74,75],{},"提交规范，代码风格，代码规范，环境变量等等","；改造的范围大致分为以下几点：",[78,79,80,84,91,102],"ul",{},[81,82,83],"li",{},"不同的环境变量，设置对应不同的值",[81,85,86,87,90],{},"设置跨域已经增强",[48,88,89],{},"http","工具，设置全局的访问前缀；",[81,92,93,101],{},[34,94,98],{"href":95,"rel":96},"https:\u002F\u002Fswagger.io\u002F",[97],"nofollow",[48,99,100],{},"swagger文档","生产文档，不再需要自己编写具体的文档说明；",[81,103,104,107],{},[48,105,106],{},"中间件，拦截器，定时任务等等","；",[63,109,110],{"id":110},"加载不同的环境文件",[26,112,113,114,117,118],{},"这里有俩种的方案可以实现，",[48,115,116],{},"dotenv","和",[48,119,120],{},"@nestjs\u002Fconfig",[26,122,123],{},"首先需要设置环境，根据变量区分是开发环境还是生产环境；",[26,125,126,129,130,133,134,137,138,141,142,145],{},[48,127,128],{},"pnpm add -D cross-env","安装",[48,131,132],{},"cross-env","，然后再",[48,135,136],{},"package.json","中找到",[48,139,140],{},"scripts",", 修改",[48,143,144],{},"start","启动命令：",[147,148,152],"pre",{"className":149,"code":150,"language":151,"meta":9,"style":9},"language-json shiki shiki-themes material-theme-lighter github-light github-dark","{\n  \"scripts\": {\n    \"start\": \"cross-env NODE_ENV=development nest start\",\n    \"start:dev\": \"cross-env NODE_ENV=development nest start --watch\",\n    \"start:debug\": \"cross-env NODE_ENV=development nest start --debug --watch\"\n  }\n}\n","json",[48,153,154,163,182,208,229,249,255],{"__ignoreMap":9},[155,156,159],"span",{"class":157,"line":158},"line",1,[155,160,162],{"class":161},"sP7_E","{\n",[155,164,166,170,173,176,179],{"class":157,"line":165},2,[155,167,169],{"class":168},"s39Yj","  \"",[155,171,140],{"class":172},"sseR_",[155,174,175],{"class":168},"\"",[155,177,178],{"class":161},":",[155,180,181],{"class":161}," {\n",[155,183,185,188,191,193,195,199,203,205],{"class":157,"line":184},3,[155,186,187],{"class":168},"    \"",[155,189,144],{"class":190},"sZMiF",[155,192,175],{"class":168},[155,194,178],{"class":161},[155,196,198],{"class":197},"sjJ54"," \"",[155,200,202],{"class":201},"s_sjI","cross-env NODE_ENV=development nest start",[155,204,175],{"class":197},[155,206,207],{"class":161},",\n",[155,209,211,213,216,218,220,222,225,227],{"class":157,"line":210},4,[155,212,187],{"class":168},[155,214,215],{"class":190},"start:dev",[155,217,175],{"class":168},[155,219,178],{"class":161},[155,221,198],{"class":197},[155,223,224],{"class":201},"cross-env NODE_ENV=development nest start --watch",[155,226,175],{"class":197},[155,228,207],{"class":161},[155,230,232,234,237,239,241,243,246],{"class":157,"line":231},5,[155,233,187],{"class":168},[155,235,236],{"class":190},"start:debug",[155,238,175],{"class":168},[155,240,178],{"class":161},[155,242,198],{"class":197},[155,244,245],{"class":201},"cross-env NODE_ENV=development nest start --debug --watch",[155,247,248],{"class":197},"\"\n",[155,250,252],{"class":157,"line":251},6,[155,253,254],{"class":161},"  }\n",[155,256,258],{"class":157,"line":257},7,[155,259,260],{"class":161},"}\n",[262,263,116],"h3",{"id":116},[26,265,266,267,117,270,107],{},"在项目根目录添加",[48,268,269],{},".env.development",[48,271,272],{},".env.production",[26,274,275,276,279],{},"在",[48,277,278],{},"main.ts","中添加如下：",[147,281,285],{"className":282,"code":283,"language":284,"meta":9,"style":9},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import * as dotenv from \"dotenv\";\nconst { NODE_ENV } = process.env;\nconst envFile = `.env${NODE_ENV ? `.${NODE_ENV}` : \".production\"}`;\ndotenv.config({ path: envFile });\n","ts",[48,286,287,315,345,393],{"__ignoreMap":9},[155,288,289,293,296,299,303,306,308,310,312],{"class":157,"line":158},[155,290,292],{"class":291},"sVHd0","import",[155,294,295],{"class":168}," *",[155,297,298],{"class":291}," as",[155,300,302],{"class":301},"su5hD"," dotenv ",[155,304,305],{"class":291},"from",[155,307,198],{"class":197},[155,309,116],{"class":201},[155,311,175],{"class":197},[155,313,314],{"class":161},";\n",[155,316,317,321,324,328,331,335,338,341,343],{"class":157,"line":165},[155,318,320],{"class":319},"sbsja","const",[155,322,323],{"class":161}," {",[155,325,327],{"class":326},"s_hVV"," NODE_ENV",[155,329,330],{"class":161}," }",[155,332,334],{"class":333},"smGrS"," =",[155,336,337],{"class":301}," process",[155,339,340],{"class":161},".",[155,342,13],{"class":301},[155,344,314],{"class":161},[155,346,347,349,352,354,357,360,363,366,369,371,373,375,377,380,383,385,388,391],{"class":157,"line":184},[155,348,320],{"class":319},[155,350,351],{"class":326}," envFile",[155,353,334],{"class":333},[155,355,356],{"class":197}," `",[155,358,359],{"class":201},".env",[155,361,362],{"class":197},"${",[155,364,365],{"class":326},"NODE_ENV",[155,367,368],{"class":333}," ?",[155,370,356],{"class":197},[155,372,340],{"class":201},[155,374,362],{"class":197},[155,376,365],{"class":326},[155,378,379],{"class":197},"}`",[155,381,382],{"class":333}," :",[155,384,198],{"class":197},[155,386,387],{"class":201},".production",[155,389,390],{"class":197},"\"}`",[155,392,314],{"class":161},[155,394,395,397,399,403,406,409,413,415,418,421,424],{"class":157,"line":210},[155,396,116],{"class":301},[155,398,340],{"class":161},[155,400,402],{"class":401},"sGLFI","config",[155,404,405],{"class":301},"(",[155,407,408],{"class":161},"{",[155,410,412],{"class":411},"skxfh"," path",[155,414,178],{"class":161},[155,416,417],{"class":301}," envFile ",[155,419,420],{"class":161},"}",[155,422,423],{"class":301},")",[155,425,314],{"class":161},[26,427,428,429,432],{},"这样就可以使用",[48,430,431],{},"process.env.XXXX","了",[262,434,120],{"id":435},"nestjsconfig",[26,437,438,439],{},"如果使用这种方案，那么就需要引入",[48,440,441],{},"pnpm add @nestjs\u002Fconfig",[147,443,445],{"className":282,"code":444,"language":284,"meta":9,"style":9},"import { ConfigModule } from \"@nestjs\u002Fconfig\";\n@Module({\n  imports: [\n    \u002F\u002F 加载环境配置文件\n    ConfigModule.forRoot({\n      isGlobal: true,\n      envFilePath:\n        process.env.NODE_ENV === 'development'\n          ? '.env.development'\n          : '.env.production',\n    }),\n  ]\n})\n",[48,446,447,469,481,491,497,511,524,532,558,570,585,595,601],{"__ignoreMap":9},[155,448,449,451,453,456,458,461,463,465,467],{"class":157,"line":158},[155,450,292],{"class":291},[155,452,323],{"class":161},[155,454,455],{"class":301}," ConfigModule",[155,457,330],{"class":161},[155,459,460],{"class":291}," from",[155,462,198],{"class":197},[155,464,120],{"class":201},[155,466,175],{"class":197},[155,468,314],{"class":161},[155,470,471,474,477,479],{"class":157,"line":165},[155,472,473],{"class":161},"@",[155,475,476],{"class":401},"Module",[155,478,405],{"class":301},[155,480,162],{"class":161},[155,482,483,486,488],{"class":157,"line":184},[155,484,485],{"class":411},"  imports",[155,487,178],{"class":161},[155,489,490],{"class":301}," [\n",[155,492,493],{"class":157,"line":210},[155,494,496],{"class":495},"sutJx","    \u002F\u002F 加载环境配置文件\n",[155,498,499,502,504,507,509],{"class":157,"line":231},[155,500,501],{"class":301},"    ConfigModule",[155,503,340],{"class":161},[155,505,506],{"class":401},"forRoot",[155,508,405],{"class":301},[155,510,162],{"class":161},[155,512,513,516,518,522],{"class":157,"line":251},[155,514,515],{"class":411},"      isGlobal",[155,517,178],{"class":161},[155,519,521],{"class":520},"syTEX"," true",[155,523,207],{"class":161},[155,525,526,529],{"class":157,"line":257},[155,527,528],{"class":411},"      envFilePath",[155,530,531],{"class":161},":\n",[155,533,535,538,540,542,544,546,549,552,555],{"class":157,"line":534},8,[155,536,537],{"class":301},"        process",[155,539,340],{"class":161},[155,541,13],{"class":301},[155,543,340],{"class":161},[155,545,365],{"class":326},[155,547,548],{"class":333}," ===",[155,550,551],{"class":197}," '",[155,553,554],{"class":201},"development",[155,556,557],{"class":197},"'\n",[155,559,561,564,566,568],{"class":157,"line":560},9,[155,562,563],{"class":333},"          ?",[155,565,551],{"class":197},[155,567,269],{"class":201},[155,569,557],{"class":197},[155,571,573,576,578,580,583],{"class":157,"line":572},10,[155,574,575],{"class":333},"          :",[155,577,551],{"class":197},[155,579,272],{"class":201},[155,581,582],{"class":197},"'",[155,584,207],{"class":161},[155,586,588,591,593],{"class":157,"line":587},11,[155,589,590],{"class":161},"    }",[155,592,423],{"class":301},[155,594,207],{"class":161},[155,596,598],{"class":157,"line":597},12,[155,599,600],{"class":301},"  ]\n",[155,602,604,606],{"class":157,"line":603},13,[155,605,420],{"class":161},[155,607,608],{"class":301},")\n",[26,610,611,612,615,616,619],{},"在 ",[48,613,614],{},"app.module.ts"," 中注册后，可在任意 Service 中注入 ",[48,617,618],{},"ConfigService","：",[147,621,623],{"className":282,"code":622,"language":284,"meta":9,"style":9},"import { ConfigService } from \"@nestjs\u002Fconfig\";\n\n@Injectable()\nexport class AppService {\n  constructor(private config: ConfigService) {}\n\n  getPort() {\n    return this.config.get\u003Cnumber>(\"PORT\", 3000);\n  }\n}\n",[48,624,625,646,652,662,676,699,703,714,760,764],{"__ignoreMap":9},[155,626,627,629,631,634,636,638,640,642,644],{"class":157,"line":158},[155,628,292],{"class":291},[155,630,323],{"class":161},[155,632,633],{"class":301}," ConfigService",[155,635,330],{"class":161},[155,637,460],{"class":291},[155,639,198],{"class":197},[155,641,120],{"class":201},[155,643,175],{"class":197},[155,645,314],{"class":161},[155,647,648],{"class":157,"line":165},[155,649,651],{"emptyLinePlaceholder":650},true,"\n",[155,653,654,656,659],{"class":157,"line":184},[155,655,473],{"class":161},[155,657,658],{"class":401},"Injectable",[155,660,661],{"class":301},"()\n",[155,663,664,667,670,674],{"class":157,"line":210},[155,665,666],{"class":291},"export",[155,668,669],{"class":319}," class",[155,671,673],{"class":672},"sbgvK"," AppService",[155,675,181],{"class":161},[155,677,678,681,683,686,690,692,694,696],{"class":157,"line":231},[155,679,680],{"class":319},"  constructor",[155,682,405],{"class":161},[155,684,685],{"class":319},"private",[155,687,689],{"class":688},"s99_P"," config",[155,691,178],{"class":333},[155,693,633],{"class":672},[155,695,423],{"class":161},[155,697,698],{"class":161}," {}\n",[155,700,701],{"class":157,"line":251},[155,702,651],{"emptyLinePlaceholder":650},[155,704,705,709,712],{"class":157,"line":257},[155,706,708],{"class":707},"sVXei","  getPort",[155,710,711],{"class":161},"()",[155,713,181],{"class":161},[155,715,716,719,722,724,726,728,731,734,737,740,742,744,747,749,752,756,758],{"class":157,"line":534},[155,717,718],{"class":291},"    return",[155,720,721],{"class":168}," this",[155,723,340],{"class":161},[155,725,402],{"class":301},[155,727,340],{"class":161},[155,729,730],{"class":401},"get",[155,732,733],{"class":161},"\u003C",[155,735,736],{"class":190},"number",[155,738,739],{"class":161},">",[155,741,405],{"class":411},[155,743,175],{"class":197},[155,745,746],{"class":201},"PORT",[155,748,175],{"class":197},[155,750,751],{"class":161},",",[155,753,755],{"class":754},"srdBf"," 3000",[155,757,423],{"class":411},[155,759,314],{"class":161},[155,761,762],{"class":157,"line":560},[155,763,254],{"class":161},[155,765,766],{"class":157,"line":572},[155,767,260],{"class":161},[26,769,770,771,774,775,778,779,43],{},"生产环境建议通过 ",[48,772,773],{},"ConfigModule.forRoot({ envFilePath: [\".env\", \".env.production\"] })"," 或 ",[48,776,777],{},"registerAsync"," 从密钥管理服务加载，勿将密钥提交到仓库。详见 ",[34,780,782],{"href":781},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fconfig","new\u002Fconfig",[63,784,785],{"id":785},"参考文献",[787,788,789,802],"table",{},[790,791,792],"thead",{},[793,794,795,799],"tr",{},[796,797,798],"th",{},"资料",[796,800,801],{},"说明",[803,804,805,820],"tbody",{},[793,806,807,815],{},[808,809,810],"td",{},[34,811,814],{"href":812,"rel":813},"https:\u002F\u002Fdocs.nestjs.com\u002Ftechniques\u002Fconfiguration",[97],"Configuration",[808,816,817,819],{},[48,818,120],{}," 官方",[793,821,822,828],{},[808,823,824],{},[34,825,827],{"href":826},"\u002Fknowledge\u002Fbooklet\u002Fproject\u002Fproject\u002Fenv","工程化 · 环境变量",[808,829,830,832],{},[48,831,359],{}," 约定",[834,835,836],"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 .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--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 .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 .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}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 .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--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 .sVXei, html code.shiki .sVXei{--shiki-light:#E53935;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":9,"searchDepth":165,"depth":165,"links":838},[839,840,844],{"id":65,"depth":165,"text":65},{"id":110,"depth":165,"text":110,"children":841},[842,843],{"id":116,"depth":184,"text":116},{"id":435,"depth":184,"text":120},{"id":785,"depth":165,"text":785},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fend\u002FNestJS\u002Fbefore\u002Fenv","knowledge\u002Fknowledge\u002Fbooklet\u002Fend\u002FNestJS\u002Fbefore\u002Fenv.md","md",{"items":850},[851,854,857,861,864,867],{"path":852,"title":853,"description":9,"category":10,"score":251},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fexce","异常处理器",{"path":855,"title":856,"description":9,"category":10,"score":251},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fdatabase","数据库的配置",{"path":858,"title":859,"description":860,"category":10,"score":251},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finfo","归档说明（before\u002F）","本目录（before\u002F）为早期 NestJS 实战笔记：以完整业务片段（守卫、拦截器、MongoDB、JWT 等）为主，写法与文件命名不统一。新项目请跟 new\u002F 主线，技术细节以 docs.nestjs.com 为准。",{"path":862,"title":863,"description":9,"category":10,"score":251},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fitc","统一响应格式拦截器",{"path":865,"title":866,"description":9,"category":10,"score":251},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fnext","路由守卫",{"path":868,"title":869,"description":9,"category":10,"score":251},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fdemo","入手Demo",{"series":871,"title":872,"items":873,"index":165,"prev":903,"next":904},"booklet\u002Fend\u002Fnestjs\u002Fbefore","before",[874,876,878,879,881,883,887,889,893,897,899],{"path":855,"title":856,"date":875,"pinned":15},"2024-06-22",{"path":868,"title":869,"date":877,"pinned":15},"2022-10-15",{"path":7,"title":8,"date":14,"pinned":15},{"path":852,"title":853,"date":880,"pinned":15},"2026-03-17",{"path":858,"title":859,"date":882,"pinned":15},"2023-08-31",{"path":884,"title":885,"date":886,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finjectable","操作日志拦截器","2020-02-20",{"path":862,"title":863,"date":888,"pinned":15},"2023-08-17",{"path":890,"title":891,"date":892,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fjwt","JWT 与 Passport 授权","2021-08-10",{"path":894,"title":895,"date":896,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fmi","Nest 中间件","2022-06-21",{"path":865,"title":866,"date":898,"pinned":15},"2022-12-01",{"path":900,"title":901,"date":902,"pinned":15},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fother","其他配置","2022-05-23",{"path":868,"title":869,"date":877,"pinned":15},{"path":852,"title":853,"date":880,"pinned":15}]