首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Nest.js开发服务端实战:跑通 REST API

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

原创
作者头像
用户12608867
发布于 2026-09-17 14:49:52
发布于 2026-09-17 14:49:52
1410
举报

很多人学 Nest.js,一上来就被装饰器、模块、依赖注入、管道、守卫、拦截器绕晕。结果项目结构还没搭好,热情已经消耗一半。

其实服务端开发的核心就四件事:

路由 → 参数 → 业务 → 数据。

Nest.js 只是用更工程化的方式,把这四件事组织起来。先用 20 行核心代码跑通一个能用的接口,再逐步加验证、数据库、鉴权和部署。


一、Nest.js 服务端开发的公式

Nest.js 服务端 = 模块 + 控制器 + 服务 + 依赖注入 + 管道/守卫/拦截器。

  • 模块:组织代码边界;
  • 控制器:定义路由和参数;
  • 服务:写业务逻辑;
  • 依赖注入:解耦组件;
  • 管道/守卫/拦截器:处理验证、权限、日志和响应。

先跑通模块、控制器、服务,其他都是按需叠加。


二、最小代码:20 行核心接口

用 nest new server 创建项目后,核心代码就下面这些。省略 import,只看结构。

代码语言:javascript
复制
// 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); }
代码语言:javascript
复制
// 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;
  }
}

最后在模块里注册:

代码语言:javascript
复制
@Module({ controllers: [NotesController], providers: [NotesService] })
export class NotesModule {}

启动后,你就有了三个接口:

  • GET /notes:查列表;
  • GET /notes/:id:查单条;
  • POST /notes:新增笔记。

这就是 Nest.js 服务端的最小闭环。


三、实战工作流

  1. 创建项目:npx @nestjs/cli new server
  2. 生成模块:nest g resource notes,自动生成 CRUD 骨架。
  3. 定义 DTO:用 class-validator 做参数校验。
  4. 接入数据库:用 Prisma 或 TypeORM,替换内存数组。
  5. 加全局管道:app.useGlobalPipes(new ValidationPipe())。
  6. 加异常过滤器:统一错误响应格式。
  7. 加 Swagger:自动生成接口文档。
  8. 加鉴权:JWT、Guard、角色权限。
  9. 部署上线:Docker、环境变量、日志、监控。

一条命令生成完整 CRUD 骨架:

代码语言:javascript
复制
nest g resource notes

四、少量代码的关键:用对抽象

  • 用 CLI 生成骨架,不手写重复文件。
  • 用 装饰器 声明路由,不写路由表。
  • 用 依赖注入 解耦,不在控制器里 new 服务。
  • 用 DTO + ValidationPipe 自动校验,不手写 if-else。
  • 用 ORM 操作数据库,不手写 SQL 拼接。
  • 用 Guard / Interceptor 处理权限和日志,不污染业务代码。

框架的价值,就是让你少写重复代码,多写业务逻辑。


五、常见坑

  • 忘记注册模块:写了 Controller 和 Service,但没放进 Module。
  • 循环依赖:Service 互相注入,启动直接报错。
  • 异步未处理:数据库操作没 await,返回空数据。
  • DTO 没加装饰器:ValidationPipe 不生效。
  • 全局管道未启用:参数校验形同虚设。
  • CORS 未配置:前端请求被浏览器拦截。
  • 异常直接抛出:统一异常过滤器缺失,返回 500 堆栈。
  • 密钥硬编码:数据库密码写进代码,安全风险极高。
  • 守卫顺序错误:鉴权和角色校验顺序不对,导致越权。
  • 忽略日志和监控:线上出问题,无法定位。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、Nest.js 服务端开发的公式
  • 二、最小代码:20 行核心接口
  • 三、实战工作流
  • 四、少量代码的关键:用对抽象
  • 五、常见坑
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档