NestJS从拔高到精通,大型复杂业务架构落地实践-mk

144 阅读2分钟

NestJS从拔高到精通,大型复杂业务架构落地实践-mk

 NestJS从拔高到精通,大型复杂业务架构落地实践

NestJS 有哪些常用的 API?

NestJS 提供了一系列丰富的 API 和工具,帮助开发者快速构建高效、可扩展的后端应用。以下是一些常用的核心 API 和功能模块:

1. 核心模块和装饰器

@Module 装饰器

  • 用途:定义模块,模块是包含相关功能的逻辑单元。

  • 示例

    typescript深色版本import { Module } from '@nestjs/common';import { AppController } from './app.controller';import { AppService } from './app.service';@Module({  imports: [], // 导入其他模块  controllers: [AppController], // 注册控制器  providers: [AppService], // 注册服务})export class AppModule {}
    

@Controller 装饰器

  • 用途:定义控制器,处理 HTTP 请求。

  • 示例

    typescript深色版本import { Controller, Get } from '@nestjs/common';@Controller('example')export class ExampleController {  @Get()  getExample() {    return 'Hello World';  }}
    

@Injectable 装饰器

  • 用途:定义服务,提供可注入的类。

  • 示例

    typescript深色版本import { Injectable } from '@nestjs/common';@Injectable()export class AppService {  getData() {    return 'Hello World';  }}
    

2. 路由和请求处理

@Get@Post@Put@Delete 等装饰器

  • 用途:定义 HTTP 方法。

  • 示例

    typescript深色版本import { Controller, Get, Post, Put, Delete } from '@nestjs/common';@Controller('items')export class ItemsController {  @Get()  findAll() {    return 'This action returns all items';  }  @Post()  create() {    return 'This action creates an item';  }  @Put(':id')  update(@Param('id') id: string) {    return `This action updates an item with id ${id}`;  }  @Delete(':id')  remove(@Param('id') id: string) {    return `This action removes an item with id ${id}`;  }}
    

@Param@Query@Body@Headers 等装饰器

  • 用途:提取请求中的参数。

  • 示例

    typescript深色版本import { Controller, Get, Param, Query, Body, Headers } from '@nestjs/common';@Controller('items')export class ItemsController {  @Get(':id')  findOne(@Param('id') id: string, @Query('search') search: string) {    return `Item with id ${id} and search term ${search}`;  }  @Post()  create(@Body() body: any) {    return `Created item: ${JSON.stringify(body)}`;  }  @Get()  getHeaders(@Headers('User-Agent') userAgent: string) {    return `User-Agent: ${userAgent}`;  }}
    

3. 中间件

@UseMiddleware 装饰器

  • 用途:在控制器或方法级别应用中间件。

  • 示例

    typescript深色版本import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';import { AppController } from './app.controller';import { AppService } from './app.service';import { LoggerMiddleware } from './logger.middleware';@Module({  imports: [],  controllers: [AppController],  providers: [AppService],})export class AppModule implements NestModule {  configure(consumer: MiddlewareConsumer) {    consumer      .apply(LoggerMiddleware)      .forRoutes('example'); // 应用到特定路由  }}
    

4. 依赖注入

@Inject 装饰器

  • 用途:显式注入依赖。

  • 示例

    typescript深色版本import { Injectable, Inject } from '@nestjs/common';@Injectable()export class AppService {  constructor(@Inject('DATABASE_CONNECTION') private readonly db: any) {}}
    

5. 异常处理

HttpException 类

  • 用途:抛出 HTTP 异常。

  • 示例

    typescript深色版本import { HttpException, HttpStatus, Injectable } from '@nestjs/common';@Injectable()export class AppService {  getData(id: number) {    if (id <= 0) {      throw new HttpException('Invalid ID', HttpStatus.BAD_REQUEST);    }    return 'Data for ID: ' + id;  }}
    

6. 数据验证

@ValidatePipe 装饰器

  • 用途:自动验证请求体。

  • 示例

    typescript深色版本import { Controller, Post, Body, UsePipes, ValidationPipe } from '@nestjs/common';import { CreateItemDto } from './dto/create-item.dto';@Controller('items')export class ItemsController {  @Post()  @UsePipes(new ValidationPipe())  create(@Body() createItemDto: CreateItemDto) {    return 'Item created';  }}
    

7. 其他常用模块

@nestjs/config 模块

  • 用途:管理配置文件。

  • 示例

    typescript深色版本import { ConfigModule, ConfigService } from '@nestjs/config';import { Module } from '@nestjs/common';@Module({  imports: [    ConfigModule.forRoot({      isGlobal: true,    }),  ],  providers: [ConfigService],})export class AppModule {}
    

@nestjs/mongoose 模块

  • 用途:集成 MongoDB。

  • 示例

    typescript深色版本import { Module } from '@nestjs/common';import { MongooseModule } from '@nestjs/mongoose';import { ItemSchema } from './schemas/item.schema';@Module({  imports: [    MongooseModule.forFeature([{ name: 'Item', schema: ItemSchema }]),  ],})export class ItemModule {}
    

这些 API 和模块是 NestJS 开发中最常用的部分,掌握了它们,你将能够构建出高效、可维护的后端应用。