[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finfo":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finfo":466,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finfo":480},{"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":462,"stem":463,"id":464,"extension":465},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finfo","归档说明（before\u002F）","本目录（before\u002F）为早期 NestJS 实战笔记：以完整业务片段（守卫、拦截器、MongoDB、JWT 等）为主，写法与文件命名不统一。新项目请跟 new\u002F 主线，技术细节以 docs.nestjs.com 为准。","技能小册",[12],"nestjs","2023-08-31",false,{"type":16,"value":17,"toc":454},"minimark",[18,22,52,56,109,112,312,336,340,350,359,362,389,392,395],[19,20,8],"h1",{"id":21},"归档说明before",[23,24,25,26,30,31,35,36,43,44,51],"p",{},"本目录（",[27,28,29],"code",{},"before\u002F","）为",[32,33,34],"strong",{},"早期 NestJS 实战笔记","：以完整业务片段（守卫、拦截器、MongoDB、JWT 等）为主，写法与文件命名不统一。",[32,37,38,39,42],{},"新项目请跟 ",[27,40,41],{},"new\u002F"," 主线","，技术细节以 ",[45,46,50],"a",{"href":47,"rel":48},"https:\u002F\u002Fdocs.nestjs.com\u002F",[49],"nofollow","docs.nestjs.com"," 为准。",[53,54,55],"h2",{"id":55},"请优先阅读",[57,58,59,72],"table",{},[60,61,62],"thead",{},[63,64,65,69],"tr",{},[66,67,68],"th",{},"文档",[66,70,71],{},"说明",[73,74,75,87,98],"tbody",{},[63,76,77,84],{},[78,79,80],"td",{},[45,81,83],{"href":82},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs","NestJS 导读",[78,85,86],{},"学习路径与请求生命周期",[63,88,89,95],{},[78,90,91],{},[45,92,94],{"href":93},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fbase","new\u002F 基础概念",[78,96,97],{},"模块、控制器、提供者",[63,99,100,106],{},[78,101,102],{},[45,103,105],{"href":104},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fauth","new\u002F 认证",[78,107,108],{},"官方推荐的 Passport \u002F JWT 写法",[53,110,111],{"id":111},"本目录文件对照",[57,113,114,127],{},[60,115,116],{},[63,117,118,121,124],{},[66,119,120],{},"文件",[66,122,123],{},"主题",[66,125,126],{},"主线替代",[73,128,129,152,169,186,203,220,239,256,275,291],{},[63,130,131,137,140],{},[78,132,133],{},[45,134,136],{"href":135},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fdemo","demo",[78,138,139],{},"CLI 入门 + Mongoose 日志上报 Demo",[78,141,142,147,148],{},[45,143,146],{"href":144,"rel":145},"https:\u002F\u002Fdocs.nestjs.com\u002Ffirst-steps",[49],"first-steps","、",[45,149,151],{"href":150},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fdatabase","new\u002Fdatabase",[63,153,154,160,163],{},[78,155,156],{},[45,157,159],{"href":158},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fenv","env",[78,161,162],{},"多环境变量（dotenv \u002F ConfigModule）",[78,164,165],{},[45,166,168],{"href":167},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fconfig","new\u002Fconfig",[63,170,171,177,180],{},[78,172,173],{},[45,174,176],{"href":175},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fmi","mi",[78,178,179],{},"中间件",[78,181,182],{},[45,183,185],{"href":184},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fmiddleware","new\u002Fmiddleware",[63,187,188,194,197],{},[78,189,190],{},[45,191,193],{"href":192},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fnext","next",[78,195,196],{},"路由守卫（重复提交、权限、JWT）",[78,198,199],{},[45,200,202],{"href":201},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fguards","new\u002Fguards",[63,204,205,211,214],{},[78,206,207],{},[45,208,210],{"href":209},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fitc","itc",[78,212,213],{},"统一响应格式的拦截器",[78,215,216],{},[45,217,219],{"href":218},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fintercept","new\u002Fintercept",[63,221,222,228,231],{},[78,223,224],{},[45,225,227],{"href":226},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Finjectable","Injectable",[78,229,230],{},"操作日志拦截器",[78,232,233,147,235],{},[45,234,219],{"href":218},[45,236,238],{"href":237},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Flogger","new\u002Flogger",[63,240,241,247,250],{},[78,242,243],{},[45,244,246],{"href":245},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fexce","exce",[78,248,249],{},"全局异常过滤器",[78,251,252],{},[45,253,255],{"href":254},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Ferror","new\u002Ferror",[63,257,258,264,267],{},[78,259,260],{},[45,261,263],{"href":262},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fdatabase","database",[78,265,266],{},"Mongoose + Redis",[78,268,269,147,271],{},[45,270,151],{"href":150},[45,272,274],{"href":273},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fcache","new\u002Fcache",[63,276,277,283,286],{},[78,278,279],{},[45,280,282],{"href":281},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fjwt%E6%8E%88%E6%9D%83","jwt授权",[78,284,285],{},"JWT + Passport 片段",[78,287,288],{},[45,289,290],{"href":104},"new\u002Fauth",[63,292,293,299,302],{},[78,294,295],{},[45,296,298],{"href":297},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fother","other",[78,300,301],{},"ValidationPipe、限流、定时任务",[78,303,304,147,308],{},[45,305,307],{"href":306},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fpipes","new\u002Fpipes",[45,309,311],{"href":310},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fnew\u002Fcron","new\u002Fcron",[313,314,315],"blockquote",{},[23,316,317,320,321,324,325,328,329,324,332,335],{},[32,318,319],{},"命名说明","：",[27,322,323],{},"next.md"," 内容为",[32,326,327],{},"路由守卫","，与 Next.js 无关；",[27,330,331],{},"Injectable.md",[32,333,334],{},"拦截器示例","，文件名来自历史习惯。",[53,337,339],{"id":338},"请求生命周期对照阅读","请求生命周期（对照阅读）",[341,342,347],"pre",{"className":343,"code":345,"language":346},[344],"language-text","Middleware → Guards → Interceptors (before) → Pipes → Handler\n  → Interceptors (after) → Exception filters（若出错）\n","text",[27,348,345],{"__ignoreMap":349},"",[23,351,352,353,358],{},"官方说明：",[45,354,357],{"href":355,"rel":356},"https:\u002F\u002Fdocs.nestjs.com\u002Ffaq\u002Frequest-lifecycle",[49],"Request lifecycle","。",[53,360,361],{"id":361},"前置知识",[363,364,365,383],"ul",{},[366,367,368,147,372,376,377,382],"li",{},[45,369,371],{"href":370},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnodejs\u002Fbase\u002Fvar","Node.js 基础",[45,373,375],{"href":374},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fbasics","JavaScript 基础","（Nest 使用 TypeScript，见 ",[45,378,381],{"href":379,"rel":380},"https:\u002F\u002Fwww.typescriptlang.org\u002Fdocs\u002F",[49],"TypeScript 官方文档","）",[366,384,385],{},[45,386,388],{"href":387},"\u002Fknowledge\u002Fbooklet\u002Fproject\u002Fproject\u002Fenv","工程化 · 环境变量",[53,390,391],{"id":391},"参考文献",[23,393,394],{},"以下链接在编写时均可正常访问：",[57,396,397,406],{},[60,398,399],{},[63,400,401,404],{},[66,402,403],{},"资料",[66,405,71],{},[73,407,408,419,430,442],{},[63,409,410,416],{},[78,411,412],{},[45,413,415],{"href":47,"rel":414},[49],"NestJS 文档",[78,417,418],{},"英文官方",[63,420,421,427],{},[78,422,423],{},[45,424,426],{"href":144,"rel":425},[49],"First steps",[78,428,429],{},"创建项目",[63,431,432,439],{},[78,433,434],{},[45,435,438],{"href":436,"rel":437},"https:\u002F\u002Fdocs.nestjs.com\u002Ftechniques\u002Fmongodb",[49],"Techniques · MongoDB",[78,440,441],{},"Mongoose 集成",[63,443,444,451],{},[78,445,446],{},[45,447,450],{"href":448,"rel":449},"https:\u002F\u002Fdocs.nestjs.com\u002Fsecurity\u002Fauthentication",[49],"Security · Authentication",[78,452,453],{},"认证",{"title":349,"searchDepth":455,"depth":455,"links":456},2,[457,458,459,460,461],{"id":55,"depth":455,"text":55},{"id":111,"depth":455,"text":111},{"id":338,"depth":455,"text":339},{"id":361,"depth":455,"text":361},{"id":391,"depth":455,"text":391},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fend\u002FNestJS\u002Fbefore\u002Finfo","knowledge\u002Fknowledge\u002Fbooklet\u002Fend\u002FNestJS\u002Fbefore\u002Finfo.md","md",{"items":467},[468,471,473,475,477,478],{"path":245,"title":469,"description":349,"category":10,"score":470},"异常处理器",6,{"path":158,"title":472,"description":349,"category":10,"score":470},"环境加载",{"path":262,"title":474,"description":349,"category":10,"score":470},"数据库的配置",{"path":209,"title":476,"description":349,"category":10,"score":470},"统一响应格式拦截器",{"path":192,"title":327,"description":349,"category":10,"score":470},{"path":135,"title":479,"description":349,"category":10,"score":470},"入手Demo",{"series":481,"title":482,"items":483,"index":509,"prev":510,"next":511},"booklet\u002Fend\u002Fnestjs\u002Fbefore","before",[484,486,488,490,492,493,495,497,501,504,506],{"path":262,"title":474,"date":485,"pinned":14},"2024-06-22",{"path":135,"title":479,"date":487,"pinned":14},"2022-10-15",{"path":158,"title":472,"date":489,"pinned":14},"2024-09-01",{"path":245,"title":469,"date":491,"pinned":14},"2026-03-17",{"path":7,"title":8,"date":13,"pinned":14},{"path":226,"title":230,"date":494,"pinned":14},"2020-02-20",{"path":209,"title":476,"date":496,"pinned":14},"2023-08-17",{"path":498,"title":499,"date":500,"pinned":14},"\u002Fknowledge\u002Fbooklet\u002Fend\u002Fnestjs\u002Fbefore\u002Fjwt","JWT 与 Passport 授权","2021-08-10",{"path":175,"title":502,"date":503,"pinned":14},"Nest 中间件","2022-06-21",{"path":192,"title":327,"date":505,"pinned":14},"2022-12-01",{"path":297,"title":507,"date":508,"pinned":14},"其他配置","2022-05-23",4,{"path":245,"title":469,"date":491,"pinned":14},{"path":226,"title":230,"date":494,"pinned":14}]