首页 文章 精选 留言 我的

精选列表

搜索[api],共10000篇文章
优秀的个人博客,低调大师

Nest.js开发服务端实战:跑通 REST API

很多人学 Nest.js,一上来就被装饰器、模块、依赖注入、管道、守卫、拦截器绕晕。结果项目结构还没搭好,热情已经消耗一半。 其实服务端开发的核心就四件事: > **路由 → 参数 → 业务 → 数据。** Nest.js 只是用更工程化的方式,把这四件事组织起来。先用 20 行核心代码跑通一个能用的接口,再逐步加验证、数据库、鉴权和部署。 --- ## 一、Nest.js 服务端开发的公式 > Nest.js 服务端 = 模块 + 控制器 + 服务 + 依赖注入 + 管道/守卫/拦截器。 - **模块**:组织代码边界; - **控制器**:定义路由和参数; - **服务**:写业务逻辑; - **依赖注入**:解耦组件; - **管道/守卫/拦截器**:处理验证、权限、日志和响应。 先跑通模块、控制器、服务,其他都是按需叠加。 --- ## 二、最小代码:20 行核心接口 用 `nest new server` 创建项目后,核心代码就下面这些。省略 import,只看结构。 ``` // notes.controller.ts @Controller('notes') export class NotesController { constructor(private readonly notes: NotesService) {} @Get() findAll() { return this.notes.findAll(); } @Get(':id') findOne(@Param('id') id: string) { return this.notes.findOne(+id); } @Post() create(@Body() dto: { text: string }) { return this.notes.create(dto.text); } ``` ``` // notes.service.ts @Injectable() export class NotesService { private data = [{ id: 1, text: '第一条笔记' }]; findAll() { return this.data; } findOne(id: number) { return this.data.find(n => n.id === id); } create(text: string) { const note = { id: Date.now(), text }; this.data.push(note); return note; } } ``` 最后在模块里注册: ``` @Module({ controllers: [NotesController], providers: [NotesService] }) export class NotesModule {} ``` 启动后,你就有了三个接口: - `GET /notes`:查列表; - `GET /notes/:id`:查单条; - `POST /notes`:新增笔记。 这就是 Nest.js 服务端的最小闭环。 --- ## 三、实战工作流 1. **创建项目**:`npx @nestjs/cli new server` 1. **生成模块**:`nest g resource notes`,自动生成 CRUD 骨架。 1. **定义 DTO**:用 `class-validator` 做参数校验。 1. **接入数据库**:用 Prisma 或 TypeORM,替换内存数组。 1. **加全局管道**:`app.useGlobalPipes(new ValidationPipe())`。 1. **加异常过滤器**:统一错误响应格式。 1. **加 Swagger**:自动生成接口文档。 1. **加鉴权**:JWT、Guard、角色权限。 1. **部署上线**:Docker、环境变量、日志、监控。 一条命令生成完整 CRUD 骨架: ``` nest g resource notes ``` --- ## 四、少量代码的关键:用对抽象 - 用 **CLI** 生成骨架,不手写重复文件。 - 用 **装饰器** 声明路由,不写路由表。 - 用 **依赖注入** 解耦,不在控制器里 new 服务。 - 用 **DTO + ValidationPipe** 自动校验,不手写 if-else。 - 用 **ORM** 操作数据库,不手写 SQL 拼接。 - 用 **Guard / Interceptor** 处理权限和日志,不污染业务代码。 框架的价值,就是让你少写重复代码,多写业务逻辑。 --- ## 五、常见坑 - **忘记注册模块**:写了 Controller 和 Service,但没放进 Module。 - **循环依赖**:Service 互相注入,启动直接报错。 - **异步未处理**:数据库操作没 `await`,返回空数据。 - **DTO 没加装饰器**:ValidationPipe 不生效。 - **全局管道未启用**:参数校验形同虚设。 - **CORS 未配置**:前端请求被浏览器拦截。 - **异常直接抛出**:统一异常过滤器缺失,返回 500 堆栈。 - **密钥硬编码**:数据库密码写进代码,安全风险极高。 - **守卫顺序错误**:鉴权和角色校验顺序不对,导致越权。 - **忽略日志和监控**:线上出问题,无法定位。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册