推荐强制读英文文档,学了英语了,同时掌握了这个文档的阅读方法。以后自己也能看懂文档了。学好
nest.js
和英语
,成为全栈工程师,去找外企remote
。这就是给大家分享的破局之道
。
- 官方文档:docs.nestjs.com
- NestJS中文社区:nestjs.cn


NestJS
是基于 Node.js
的渐进式服务端框架,使用 TypeScript
构建,融合了面向对象编程(OOP
)、函数式编程(FP
)和响应式编程(RP
)理念。其核心设计借鉴了 Angular
的模块化思想,底层默认集成 Express
(可切换为 Fastify),提供开箱即用的依赖注入、中间件管道、拦截器等企业级功能。
🌱 环境准备与项目初始化
让我们从创建一个全新的NestJS项目开始:
bash
# 创建项目目录(文件夹),命名为my-nest-project
mkdir my-nest-project
# 进入刚创建的项目目录
cd my-nest-project
# 初始化Node.js项目,-y参数表示自动接受所有默认配置
# 这会生成一个package.json文件,记录项目信息和依赖
npm init -y
安装核心依赖包:
bash
# 安装NestJS核心依赖包(生产环境依赖)
# --save 表示将这些包添加到package.json的dependencies中
npm install --save @nestjs/core @nestjs/common rxjs reflect-metadata @nestjs/platform-express
# 安装开发环境依赖包
# --save-dev 表示将这些包添加到package.json的devDependencies中
npm install --save-dev typescript ts-node @types/node
🏗️ 项目基础结构搭建

js
my-nest-project/
├── src/ # 源代码目录
│ ├── app.controller.ts # 基础控制器(处理路由逻辑)
│ ├── app.module.ts # 根模块(应用组织核心)
│ └── main.ts # 应用入口(启动引导文件)
│
├── test/ # 测试目录(可选)
│
├── node_modules/ # 依赖库(自动生成)
│
├── tsconfig.json # TypeScript编译配置
│ ├── target: "ES2021" # 编译目标ES版本
│ ├── module: "commonjs" # 模块系统类型
│ └── experimentalDecorators # 启用装饰器支持
│
├── package.json # 项目配置
│ ├── dependencies # 生产依赖:
│ │ ├── @nestjs/core # Nest核心库
│ │ └── reflect-metadata # 装饰器元数据支持
│ └── scripts # 启动命令:
│ ├── start # 生产环境启动
│ └── start:dev # 开发热重载
│
└── package-lock.json # 依赖版本锁文件(自动生成)
创建基本配置文件tsconfig.json
:
json
{
"compilerOptions": {
"target": "ES2021",
"module": "commonjs",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"moduleResolution": "node"
}
}
target
和module
确保代码能在Node.js环境运行experimentalDecorators
和emitDecoratorMetadata
是NestJS框架运行的基础moduleResolution
确保模块路径解析与Node.js保持一致
🧩 核心模块构建
🌀 应用模块创建
在src/app.module.ts
中定义根模块:
typescript
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
@Module({
controllers: [AppController],
})
export class AppModule {}
NestJS
使用 @Module
装饰器定义模块化架构,其中 AppModule
作为根模块通过 controllers
数组注册路由控制器,形成应用骨架。
🎮 控制器实现
创建基础控制器src/app.controller.ts
:
typescript
import { Controller, Get } from '@nestjs/common';
@Controller()
export class AppController {
@Get()
greet(): string {
return '欢迎来到NestJS世界!';
}
}
NestJS
的控制器使用 @Controller
装饰器定义路由入口,上述代码创建了一个基础控制器 AppController
。通过 @Get()
装饰器将 greet()
方法映射到根路径的 GET
请求,返回欢迎信息,展示了 NestJS
最核心的 路由机制
和 装饰器语法
。
🚀 应用启动配置
设置应用入口文件src/main.ts
:
typescript
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
console.log(`应用已启动:http://localhost:3000`);
}
bootstrap();
这段代码是 NestJS
应用的启动入口,通过 NestFactory.create()
方法创建应用实例。bootstrap
异步函数会加载 AppModule
根模块,并在 3000
端口启动 HTTP
服务,是典型的 NestJS
应用引导方式。
关键点在于:
NestFactory
是框架核心工厂类,提供静态方法创建应用实例create()
方法接收根模块作为参数,构建完整的依赖树listen()
启动服务后默认会挂载所有注册的控制器路由
🔧 项目运行与测试
在package.json
中添加启动脚本:
json
{
"scripts": {
// 生产环境启动命令
// 使用ts-node直接运行TypeScript源码(无需编译)
// 从src/main.ts文件启动应用
"start": "ts-node src/main.ts",
// 开发环境启动命令
// 使用Nest CLI的watch模式:
// 1. 自动监听文件变化
// 2. 修改后自动重新编译和重启
// 3. 保留sourcemap支持调试
// 4. 显示更友好的错误提示
"start:dev": "nest start --watch"
}
}
启动应用:
bash
npm run start
访问测试端点:
arduino
http://localhost:3000
🌟 核心特性解析
✨ 装饰器魔法
体验装饰器的强大功能:
typescript
@Controller('products')
export class ProductsController {
@Get(':id')
getProduct(@Param('id') id: string): string {
return `产品ID: ${id}`;
}
}
💉 依赖注入系统
创建和使用服务:
typescript
@Injectable()
export class UserService {
private users = [];
addUser(user) {
this.users.push(user);
}
}
@Controller('users')
export class UsersController {
constructor(private userService: UserService) {}
}
🌈 项目优化技巧
使用Nest CLI提升开发效率:
bash
npm i -g @nestjs/cli
nest generate module users
nest generate controller users
nest generate service users
配置热重载开发环境:
bash
npm run start:dev
其中里面更多的去运用到:
- 中间件开发
- 异常过滤器
- 管道验证
- 守卫实现
- 拦截器使用

建议结合 Swagger 自动生成 API 文档,并配置 CI/CD 实现自动化部署。