图片

NestJS 是现在 Node.js 最火的企业级后端框架,GitHub 星标超过 6 万,TypeScript 优先,架构清晰,做大项目特别顺手,现在很多公司都在用。

我用 NestJS 写过几个中大型项目,聊聊它和 Express 有什么不一样,哪些场景适合用,新手值得学吗。

NestJS 解决了什么问题

Node.js 写小型项目用 Express 挺快,但项目一大,业务逻辑多了,代码放哪都不知道,全靠开发者自觉,团队开发很容易写乱。NestJS 给你一套固定架构,依赖注入、模块化、分层都帮你想好,按规范写就行,项目越大越舒服。

天生就是 TypeScript 优先,天生支持类型,写的时候就能检查出错误,大型项目重构也有信心。文档齐全,最佳实践都给你,不用团队自己摸索规范,新人来接手也容易看懂。

原生支持模块化,功能按模块拆分,每个模块管自己的事,多人开发互不干扰,维护方便多了。

基础例子看一下

用 CLI 创建项目最快:

npm i -g @nestjs/cli
nest new my-nest-project
cd my-nest-project
npm run start:dev

创建一个资源:

nest generate resource users

写个简单接口:

// src/users/users.controller.ts
import { Controller, Get, Param } from '@nestjs/common';
import { UsersService } from './users.service';

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.usersService.findOne(+id);
  }
}
// src/users/users.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class UsersService {
  private readonly users = [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }];

  findOne(id: number) {
    return this.users.find(user => user.id === id);
  }
}

启动项目访问 http://localhost:3000/users/1 就能返回数据,依赖自动注入,路由自动注册,框架都帮你搞定,你只管写业务逻辑。

核心好用的特性

模块化架构

整个应用按模块拆分,每个功能模块独立,控制器、服务、实体分开,依赖关系清晰。大项目按业务拆模块,谁改谁的模块,不会互相影响,团队协作不乱。

依赖注入

依赖注入原生支持,解耦做得好,测试的时候换个依赖就行,不用改业务代码,单元测试特别好写。项目大了,依赖关系框架帮你管理,不用自己到处 import 实例。

TypeScript 原生支持

从创建项目到写业务,全程 TypeScript,类型定义全,编辑器提示好,写错了编译器马上告诉你,减少运行时错误。大型项目开发阶段就能发现很多问题,少踩坑。

分层清晰

控制器处理请求响应,服务处理业务逻辑,实体管数据结构,分工明确,每个人只改自己负责的层,不会乱。MVC 思想玩得溜,新人一看结构就知道代码放哪。

支持多种底层

默认用 Express,也可以切换成 Fastify,换底层不用改业务代码,你想用哪个就用哪个,灵活性够。

哪些场景用 NestJS

中大型企业项目,业务复杂,团队多人开发,NestJS 的架构优势就出来了,规范清晰,不容易写乱,维护成本低。

SaaS 平台、后台管理系统后端,功能模块多,需要长期迭代,架构清晰改起来方便,新人接手也快。

微服务架构,NestJS 原生支持微服务,TCP、RabbitMQ、gRPC 都能玩,拆分服务之后互相调用方便,很多公司用它做微服务节点。

API 接口开发,REST、GraphQL 都支持,要什么自己选,文档自动生成,开发完接口文档自动有了,省不少事。

NestJS 有哪些优缺点

优点很明显,架构一套给你,约定好,团队开发不容易走歪,适合大型项目长期维护。TypeScript 体验好,类型齐全,开发提示爽,重构有信心。生态完善,认证、数据库、缓存都有现成的模块,不用自己拼。

缺点也有,入门比 Express 难,要学的概念多,模块化、依赖注入这些,新手一下子理解不了。小项目用它有点重,简单接口也要弄好几个文件,开发速度比 Express 慢。

很多东西要按框架的规矩来,自定义灵活性不如 Express,太灵活的需求写起来有点别扭。

现在 NestJS 发展得怎么样

从出来到现在,用户增长特别快,现在越来越多公司从 Express 转 NestJS,特别是做中大型项目,都喜欢用它。社区活跃,版本更新稳定,特性加得稳,破坏性变更少,老项目升级没问题。

国内前端转全栈,用 TypeScript 开发,很多都选 NestJS,招聘市场需求越来越大,会 NestJS 找全栈工作工资都高点。

现在学 NestJS 值得吗

做 Node.js 后端开发,中大型项目,肯定值得学。现在很多公司招人都要求会 NestJS,会了选择多很多。

学会它的架构思想,就算换别的语言做后端,思想也通用。TypeScript 写后端确实舒服,类型检查帮你少出很多错,大型项目体验比 JavaScript 好太多。

如果只写小项目,可能觉得有点重,但如果你要做长期维护的项目,NestJS 帮你省的维护精力,远超过入门多花的时间,早学早受益。

项目地址:https://github.com/nestjs/nest

比 JavaScript 好太多。

如果只写小项目,可能觉得有点重,但如果你要做长期维护的项目,NestJS 帮你省的维护精力,远超过入门多花的时间,早学早受益。

项目地址:https://github.com/nestjs/nest

更多推荐