专业编程基础技术教程

网站首页 > 基础教程 正文

免费开源NestJS 功能介绍及使用说明

ccvgpt 2025-05-02 16:49:05 基础教程 8 ℃

1. 简介

NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。它使用 TypeScript 编写,并结合了面向对象编程(OOP)、函数式编程(FP)和函数式响应式编程(FRP)的理念。NestJS 的架构深受 Angular 的启发,提供了模块化、依赖注入和开箱即用的支持,适用于构建企业级应用。

NestJS 的核心优势在于其高度可扩展性和对多种技术的支持,例如 REST API、GraphQL、WebSocket、微服务等。它还兼容 Express 和 Fastify,允许开发者根据需求选择底层 HTTP 引擎。

免费开源NestJS 功能介绍及使用说明

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

2. 主要功能

2.1 模块化架构

NestJS 采用模块化设计,应用程序由多个模块组成,每个模块封装了特定的功能。模块通过 @Module 装饰器定义,可以导入其他模块、提供服务和控制器。

示例代码

import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Module({
  controllers: [CatsController],
  providers: [CatsService],
})
export class CatsModule {}

功能特点

  • 模块化设计,便于代码组织和维护。
  • 支持依赖注入,提升代码的可测试性和可扩展性。

2.2 依赖注入(DI)

NestJS 内置了强大的依赖注入系统,允许开发者通过构造函数注入服务或其他依赖项。

示例代码

import { Injectable } from '@nestjs/common';

@Injectable()
export class CatsService {
  private readonly cats: string[] = [];

  findAll(): string[] {
    return this.cats;
  }
}

功能特点

  • 自动管理依赖关系,减少手动实例化的复杂性。
  • 提升代码的可测试性和可维护性。

2.3 控制器与路由

NestJS 使用控制器处理 HTTP 请求,并通过装饰器定义路由。

示例代码

import { Controller, Get } from '@nestjs/common';
import { CatsService } from './cats.service';

@Controller('cats')
export class CatsController {
  constructor(private readonly catsService: CatsService) {}

  @Get()
  findAll(): string[] {
    return this.catsService.findAll();
  }
}

功能特点

  • 支持 RESTful API 设计。
  • 提供多种请求方法装饰器(如 @Get、@Post、@Put、@Delete 等)。

2.4 中间件

NestJS 支持中间件,可以在请求到达控制器之前或之后执行特定逻辑。

示例代码

import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    console.log('Request...');
    next();
  }
}

功能特点

  • 支持全局或局部中间件。
  • 兼容 Express 和 Fastify 的中间件。

2.5 异常过滤器

NestJS 提供了异常过滤器,用于捕获和处理应用程序中的异常。

示例代码

import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common';
import { HttpException } from '@nestjs/common';

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse();
    const status = exception.getStatus();

    response.status(status).json({
      statusCode: status,
      message: exception.message,
    });
  }
}

功能特点

  • 支持自定义异常处理逻辑。
  • 提供统一的异常响应格式。

2.6 管道(Pipes)

管道用于验证和转换输入数据,例如请求参数或请求体。

示例代码

import { PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/common';

@Injectable()
export class ValidationPipe implements PipeTransform {
  transform(value: any, metadata: ArgumentMetadata) {
    // 验证或转换逻辑
    return value;
  }
}

功能特点

  • 支持数据验证和转换。
  • 内置多种常用管道(如 ParseIntPipe、ValidationPipe 等)。

2.7 拦截器(Interceptors)

拦截器用于在请求处理前后添加额外的逻辑,例如日志记录、响应格式化等。

示例代码

import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';

@Injectable()
export class LoggingInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    console.log('Before...');
    return next.handle().pipe(tap(() => console.log('After...')));
  }
}

功能特点

  • 支持请求前后的逻辑处理。
  • 兼容 RxJS 的响应式编程。

2.8 GraphQL 支持

NestJS 提供了对 GraphQL 的原生支持,可以轻松构建 GraphQL API。

示例代码

import { Resolver, Query } from '@nestjs/graphql';

@Resolver('Cat')
export class CatsResolver {
  @Query(() => String)
  async hello() {
    return 'Hello World!';
  }
}

功能特点

  • 支持 GraphQL 查询、变更和订阅。
  • 提供类型安全的开发体验。

2.9 微服务支持

NestJS 支持多种微服务架构,包括 TCP、Redis、MQTT 等。

示例代码

import { NestFactory } from '@nestjs/core';
import { Transport, MicroserviceOptions } from '@nestjs/microservices';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
    transport: Transport.TCP,
    options: { host: 'localhost', port: 3001 },
  });
  app.listen();
}
bootstrap();

功能特点

  • 支持多种通信协议。
  • 提供统一的微服务开发模式。

3. 安装与使用

3.1 安装 NestJS CLI

NestJS 提供了命令行工具(CLI),用于快速创建和管理项目。

npm install -g @nestjs/cli

3.2 创建新项目

使用 CLI 创建一个新的 NestJS 项目:

nest new my-nest-app

3.3 启动开发服务器

进入项目目录并启动开发服务器:

cd my-nest-app
npm run start

访问 http://localhost:3000,即可看到默认的欢迎页面。

4. 使用场景

  • RESTful API 开发:快速构建高性能的 REST API。
  • GraphQL API 开发:支持类型安全的 GraphQL 开发。
  • 微服务架构:适用于分布式系统和微服务架构。
  • 企业级应用:模块化和依赖注入设计,适合大型项目。

5. 结论

NestJS 是一个功能强大且灵活的 Node.js 框架,适用于构建各种类型的服务器端应用程序。它结合了现代开发的最佳实践,提供了丰富的功能和工具,帮助开发者快速构建高效、可维护的应用。


参考资料

NestJS 中文文档:
https://github.com/nestjs/nest/blob/master/readme_zh.md

NestJS 官方文档:https://docs.nestjs.com/

Tags:

最近发表
标签列表