⭐ NestJS入门指南:从零开始构建高效Node.js服务端应用

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

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"
  }
}
  1. target和module确保代码能在Node.js环境运行
  2. experimentalDecorators和emitDecoratorMetadata是NestJS框架运行的基础
  3. 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 应用引导方式。

关键点在于:

  1. NestFactory 是框架核心工厂类,提供静态方法创建应用实例
  2. create() 方法接收根模块作为参数,构建完整的依赖树
  3. 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 实现自动化部署。

相关推荐
定栓7 小时前
Webpack迁到Vite第一节:模块系统迁移:require → import
运维·前端·webpack
小熊在忙fpga7 小时前
N32G430芯片的flash表示
前端·javascript·html
Data analyse4567 小时前
App埋点版本兼容的字段迁移校验
大数据·运维·服务器·前端·数据库·数据分析
todoitbo7 小时前
本来只想给内网开个口子,Natapp 却多给了一道防护
前端·javascript·vue.js·内网穿透·网络防护·natapp
会灭火的程序员7 小时前
SuperMap AgentX Server智能体接入WEB应用技术文档
前端·supermap·agentx·agentx server
CRMEB7 小时前
商品 SKU 设计,从简单规格到多规格踩过什么
java·前端·数据库·开源
Chloe.Zz7 小时前
一篇入门Agent
开发语言·前端·javascript
java1234_小锋7 小时前
【技术专题】HTML5 网页技术 - HTML5 表格标签
前端·html·html5
雪芽蓝域zzs7 小时前
JS 项目转 TS 项目(Vue3 + 若依这类后台项目)完整改造清单
前端·vue.js