NestJS环境搭建和项目创建

50 阅读2分钟

NestJS 简介

NestJS(简称 Nest)是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的渐进式 JavaScript/TypeScript 框架。它结合了面向对象编程(OOP)、函数式编程(FP)和响应式编程(FRP)的理念,借鉴了 Angular 的架构思想,并深度集成 TypeScript,使得开发体验更接近于 Java Spring 或 .NET 等企业级后端框架。

核心特性

  1. 基于 TypeScript(兼容纯 JavaScript)
    虽然 Nest 推荐使用 TypeScript,但它完全支持原生 JavaScript 开发。

  2. 模块化架构
    应用由多个模块(Module)组成,每个模块可以包含控制器(Controller)、服务(Service)、提供者(Provider)等,便于组织和维护大型项目。

  3. 依赖注入(DI)系统
    内置强大的依赖注入机制,使代码解耦、可测试性更强。

  4. 装饰器驱动(Decorator-based)
    使用 ES 装饰器定义路由、中间件、守卫、拦截器等,语法简洁清晰。

  5. 与 Express/Fastify 兼容
    默认底层使用 Express,但也可以无缝切换到 Fastify 以获得更高性能。

  6. 开箱即用的企业级功能

    • 异常过滤器(Exception Filters)
    • 管道(Pipes):用于数据验证和转换(如集成 class-validator)
    • 守卫(Guards):用于权限控制
    • 拦截器(Interceptors):用于日志、缓存、响应包装等
    • 中间件(Middleware)
  7. 微服务与 WebSocket 支持
    原生支持构建微服务架构(通过 TCP、Redis、Kafka、MQTT 等传输层),也支持 WebSocket 实时通信。

  8. CLI 工具强大
    @nestjs/cli 提供脚手架、代码生成、构建和开发服务器等功能,提升开发效率。

  9. 生态丰富
    官方提供大量配套模块,如:

    • @nestjs/typeorm / @nestjs/mongoose(数据库)
    • @nestjs/config(配置管理)
    • @nestjs/jwt(身份认证)
    • @nestjs/swagger(自动生成 API 文档)

适用场景

  • 构建 RESTful API 或 GraphQL API
  • 企业级中大型后端服务
  • 微服务架构
  • 需要高可维护性与测试性的项目
  • 团队熟悉 Angular 或 TypeScript

官方资源

NestJS 环境搭建

安装 Node 环境

安装 node 环境、Volta工具管理器、pnpm 包管理工具

官网下载地址:nodejs.org/en/download image.png

# 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

image.png

  • 基本结构示例
// 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! image.png