NestJS 简介
NestJS(简称 Nest)是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的渐进式 JavaScript/TypeScript 框架。它结合了面向对象编程(OOP)、函数式编程(FP)和响应式编程(FRP)的理念,借鉴了 Angular 的架构思想,并深度集成 TypeScript,使得开发体验更接近于 Java Spring 或 .NET 等企业级后端框架。
核心特性
-
基于 TypeScript(兼容纯 JavaScript)
虽然 Nest 推荐使用 TypeScript,但它完全支持原生 JavaScript 开发。 -
模块化架构
应用由多个模块(Module)组成,每个模块可以包含控制器(Controller)、服务(Service)、提供者(Provider)等,便于组织和维护大型项目。 -
依赖注入(DI)系统
内置强大的依赖注入机制,使代码解耦、可测试性更强。 -
装饰器驱动(Decorator-based)
使用 ES 装饰器定义路由、中间件、守卫、拦截器等,语法简洁清晰。 -
与 Express/Fastify 兼容
默认底层使用 Express,但也可以无缝切换到 Fastify 以获得更高性能。 -
开箱即用的企业级功能
- 异常过滤器(Exception Filters)
- 管道(Pipes):用于数据验证和转换(如集成 class-validator)
- 守卫(Guards):用于权限控制
- 拦截器(Interceptors):用于日志、缓存、响应包装等
- 中间件(Middleware)
-
微服务与 WebSocket 支持
原生支持构建微服务架构(通过 TCP、Redis、Kafka、MQTT 等传输层),也支持 WebSocket 实时通信。 -
CLI 工具强大
@nestjs/cli提供脚手架、代码生成、构建和开发服务器等功能,提升开发效率。 -
生态丰富
官方提供大量配套模块,如:@nestjs/typeorm/@nestjs/mongoose(数据库)@nestjs/config(配置管理)@nestjs/jwt(身份认证)@nestjs/swagger(自动生成 API 文档)
适用场景
- 构建 RESTful API 或 GraphQL API
- 企业级中大型后端服务
- 微服务架构
- 需要高可维护性与测试性的项目
- 团队熟悉 Angular 或 TypeScript
官方资源
- 官网:nestjs.com/
- GitHub:github.com/nestjs/nest
- 文档(中文):docs.nestjs.cn/
NestJS 环境搭建
安装 Node 环境
安装 node 环境、Volta工具管理器、pnpm 包管理工具
官网下载地址:nodejs.org/en/download
# On most Unix systems including macOS, you can install with a single command:
curl https://get.volta.sh | bash
# Download and install Node.js:
volta install node@24
# Verify the Node.js version:
node -v # Should print "v24.12.0".
# Download and install pnpm:
corepack enable pnpm
# Verify pnpm version:
pnpm -v
v # Should print "11.6.2".
使用 Nest CLI 创建项目
- 安装脚手架
pnpm i -g @nestjs/cli
- 创建
NestJS项目
# 项目名称为 nest-demo
nest new nest-demo
- 基本结构示例
// main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
// app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
// app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
// app.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
- 启动项目
pnpm start:dev
访问 http://localhost:3000/,会显示输出Hello World!