NestJS简明教程——快速配置
快速配置记录 NestJS 项目的初始化、依赖注入、控制器、DTO、数据校验与 API 文档配置。初始化项目nest new first-app-g-s生成项目架构图使用madge分析模块依赖并生成架构图。安装npminstall-gmadge生成图片madge--imagegraph.svg ./src/main.ts依赖注入依赖关系在未使用依赖注入时UserController会自行创建UserService实例classUserService{findUser(){return查询用户;}}classUserController{privateuserService:UserService;constructor(){this.userServicenewUserService();}getUser(){returnthis.userService.findUser();}}UserController │ │ 依赖 ▼ UserService控制反转IoC传统方式由Controller主动创建ServiceController │ │ 创建 ▼ Service使用 IoC 后由容器负责管理和提供依赖IoC 容器 │ │ 注入 ▼ Controller ◀── ServiceNestJS 中的依赖注入提示依赖注入的核心是IoC 容器。它负责管理类的生命周期和依赖关系。Serviceimport{Injectable}fromnestjs/common;Injectable()// 表示该类可以由 IoC 容器管理exportclassUserService{findUser(){return用户数据;}}Controllerimport{Controller,Get}fromnestjs/common;import{UserService}from./user.service;Controller(users)exportclassUserController{constructor(privatereadonlyuserService:UserService){}Get()getUser(){returnthis.userService.findUser();}}提示可在dist目录查看编译后的 JavaScript 文件了解依赖注入的实现方式。Controller生成 Controllernest g controller todo --no-specCRUD 示例Controller(todo)exportclassTodoController{constructor(privatereadonlytodoService:TodoService){}Get()findAll(){returnthis.todoService.findAllTodos();}Get(:id)findOne(Param(id)id:string){returnthis.todoService.findOneTodo(Number(id));}Post()create(Body()newTodo:any){returnthis.todoService.createTodo(newTodo);}Patch(:id)update(Param(id)id:string,Body()updateTodoBody:any){returnthis.todoService.updateTodo(Number(id),updateTodoBody);}Delete(:id)deleteTodo(Param(id)id:string,Res({passthrough:true})res:Response,){constresultthis.todoService.deleteTodo(Number(id));if(result){return{message:Todo deleted successfully,};}returnres.status(HttpStatus.BAD_REQUEST).json({message:bad request,});}}提示Res({ passthrough: true })表示 NestJS 仍会自动将返回值转换为 JSON因此不需要手动调用res.json()。DTO 与 Entity推荐使用class定义 DTOexportclassCreateTodoDto{title:string;content:string;isCompleted:boolean;}PartialType可基于已有类型创建新类型并将原类型的所有属性改为可选import{PartialType}fromnestjs/mapped-types;exportclassUpdateTodoDtoextendsPartialType(CreateTodoDto){}Pipe参数校验与转换安装依赖pnpmaddclass-validator class-transformer配置全局验证管道在main.ts中添加import{ValidationPipe}fromnestjs/common;import{NestFactory}fromnestjs/core;import{AppModule}from./app.module;asyncfunctionbootstrap(){constappawaitNestFactory.create(AppModule);app.useGlobalPipes(newValidationPipe({transform:true,// 自动转换类型例如将 params 中的 string ID 转为 numberwhitelist:true,// 自动移除 DTO 未声明的属性forbidNonWhitelisted:true,// 请求体含有未声明属性时抛出异常}),);awaitapp.listen(3000);}bootstrap();为 DTO 添加验证装饰器// 这里只列出部分常用校验器import{IsBoolean,IsNotEmpty,IsString}fromclass-validator;exportclassCreateTodoDto{IsNotEmpty()IsString()title!:string;IsNotEmpty()IsString()content!:string;IsNotEmpty()IsBoolean()isCompleted!:boolean;}提示NestJS CLI 可使用以下命令生成 CRUD 资源模板nest g resourceAPI 文档Swagger安装依赖pnpmaddnestjs/swagger配置 Swagger在main.ts中添加 Swagger 配置import{DocumentBuilder,SwaggerModule}fromnestjs/swagger;constconfignewDocumentBuilder().setTitle(Todos example).setDescription(The todo API description).setVersion(1.0).addServer(http://localhost:3000,localhost).addTag(todos).build();constdocumentFactory()SwaggerModule.createDocument(app,config);SwaggerModule.setup(api,app,documentFactory,{jsonDocumentUrl:swagger/json,});配置 Swagger CLI 插件在nest-cli.json中添加{$schema:https://json.schemastore.org/nest-cli,collection:nestjs/schematics,sourceRoot:src,compilerOptions:{deleteOutDir:true,plugins:[nestjs/swagger]}}提示访问http://localhost:3000/api查看 Swagger 文档。访问http://localhost:3000/swagger/json查看 Swagger 的 JSON 文档。使用PartialType时应从nestjs/swagger导入。提高编译速度SWC安装依赖pnpmaddswc/cli swc/core-D配置 SWC在nest-cli.json中添加{compilerOptions:{builder:swc,typeCheck:true}}兼容 Swagger在main.ts中导入新增的元数据文件importmetadatafrom./metadata;awaitSwaggerModule.loadPluginMetadata(metadata);注意不推荐同时使用 SWC 构建器与 Swagger CLI 插件。

相关新闻

React中如何为非受控组件设置默认值?:深入解析与实战指南

React中如何为非受控组件设置默认值?:深入解析与实战指南

一、React中如何为非受控组件设置默认值?:概念与场景 1.1 什么是非受控组件 在React中,表单元素的处理方式分为两种:受控组件与非受控组件。受控组件的值由React的state控制,每次输入都会触发onChange并更新state;而非受控组件的值由DOM自身管理,React通过ref来读取…

2026/8/1 16:36:25阅读更多 →
Gemini 3.5编程能力实测:办公自动化脚本开发中的代码质量与可用性分析

Gemini 3.5编程能力实测:办公自动化脚本开发中的代码质量与可用性分析

用AI写办公自动化脚本,最怕五件事:生成速度够快但代码跑不通、依赖包版本对不上、异常处理全被忽略、跨文件修改时漏掉关键位置、以及一碰到小众库就直接摆烂。这五个坑,我在实际项目中一个都没少踩。 花了两周时间,用Gemini 3.5…

2026/8/1 16:34:23阅读更多 →
单片机RS485通信技术:从原理到实战应用全面解析

单片机RS485通信技术:从原理到实战应用全面解析

如果你还在用传统的串口通信方式做单片机项目,数据传输速度可能已经成为制约你项目性能的瓶颈。最近在工业控制、智能家居和物联网项目中,RS485通信协议凭借其高速、稳定、抗干扰能力强的特点,正在成为单片机通信的新宠。很多开发者对RS485的…

2026/8/1 16:34:22阅读更多 →
3步搞定:无需微软账户的Windows Insider预览版注册方案

3步搞定:无需微软账户的Windows Insider预览版注册方案

3步搞定:无需微软账户的Windows Insider预览版注册方案 【免费下载链接】offlineinsiderenroll OfflineInsiderEnroll - A script to enable access to the Windows Insider Program on machines not signed in with Microsoft Account 项目地址: https://gitcode…

2026/8/1 17:53:35阅读更多 →
SQLite JDBC驱动终极指南:Java嵌入式数据库的完整解决方案

SQLite JDBC驱动终极指南:Java嵌入式数据库的完整解决方案

SQLite JDBC驱动终极指南:Java嵌入式数据库的完整解决方案 【免费下载链接】sqlite-jdbc SQLite JDBC Driver 项目地址: https://gitcode.com/gh_mirrors/sq/sqlite-jdbc 想要在Java应用中轻松使用SQLite数据库吗?SQLite JDBC驱动提供了最简单、最…

2026/8/1 17:53:35阅读更多 →
蜜柑计划:终极动漫资源管理神器 - 快速上手完整指南 [特殊字符]

蜜柑计划:终极动漫资源管理神器 - 快速上手完整指南 [特殊字符]

蜜柑计划:终极动漫资源管理神器 - 快速上手完整指南 🍊 【免费下载链接】mikan_flutter 蜜柑计划( https://mikanani.me ),🚧 持续开发中... 项目地址: https://gitcode.com/gh_mirrors/mi/mikan_flutter…

2026/8/1 17:53:35阅读更多 →
PHP函数的简单整理

PHP函数的简单整理

一、文件包含函数函数名说明include包含并运行指定文件。如果文件不存在,会发出警告,脚本继续执行。require与 include 类似,但文件不存在或包含失败时会抛出致命错误,脚本终止。include_once与 include 相同,但会检查…

2026/8/1 17:53:35阅读更多 →
2026职场人英语阅读避坑:背了很多词,为什么读文章还是卡壳?

2026职场人英语阅读避坑:背了很多词,为什么读文章还是卡壳?

很多人学英语都有一种熟悉的割裂感:单词背过,语法学过,打卡记录也很完整。可一打开英文文章,还是读得断断续续。不是词汇量完全不够,而是传统学习流程把一件本该连续的事,拆成了好几件互相打断的小事。读一…

2026/8/1 17:53:35阅读更多 →
关键拍卖反转策略:从形态识别到市场微观结构实战解析

关键拍卖反转策略:从形态识别到市场微观结构实战解析

那天下午,盯着屏幕上那根带着长长上影线的 K 线,我意识到一个关键问题:大部分关于“关键拍卖反转”(Key Auction Reversal, KAR)的讨论,都停留在识别形态本身——比如“价格冲高回落,留下长上影…

2026/8/1 17:51:35阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/31 20:44:05阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/31 17:41:43阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/31 20:44:05阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/1 0:00:10阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/1 0:00:10阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/1 0:00:10阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/1 0:00:10阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/1 0:00:10阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/1 0:00:10阅读更多 →