NestJS从拔高到精通,大型复杂业务架构落地实践-mk
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 开发中最常用的部分,掌握了它们,你将能够构建出高效、可维护的后端应用。