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