推荐答案
在 Nest.js 中,控制器是处理传入请求并返回响应的核心部分。控制器通过装饰器来定义路由和处理程序。以下是如何在 Nest.js 中定义一个控制器的基本步骤:
创建控制器类:使用
@Controller()装饰器来定义一个控制器类。装饰器中的参数是路由的前缀。// www.javascriptcn.com code example import { Controller, Get } from '@nestjs/common'; @Controller('cats') export class CatsController { @Get() findAll(): string { return 'This action returns all cats'; } }定义路由处理程序:在控制器类中,使用
@Get()、@Post()、@Put()、@Delete()等装饰器来定义处理特定 HTTP 请求的方法。@Get(':id') findOne(@Param('id') id: string): string { return `This action returns a #${id} cat`; }依赖注入:控制器可以通过构造函数注入服务或其他依赖项。
constructor(private readonly catsService: CatsService) {}注册控制器:在模块中注册控制器,使其生效。
import { Module } from '@nestjs/common'; import { CatsController } from './cats.controller'; @Module({ controllers: [CatsController], }) export class CatsModule {}
本题详细解读
控制器的基本概念
在 Nest.js 中,控制器负责处理传入的 HTTP 请求并返回响应。控制器通常与路由相关联,路由决定了请求的 URL 路径与控制器方法的映射关系。
控制器装饰器
@Controller(prefix: string):用于定义一个控制器类,并指定路由的前缀。例如,@Controller('cats')表示该控制器处理所有以/cats开头的请求。
路由处理程序装饰器
@Get(route: string):用于处理 GET 请求。@Post(route: string):用于处理 POST 请求。@Put(route: string):用于处理 PUT 请求。@Delete(route: string):用于处理 DELETE 请求。
这些装饰器可以接受一个可选的路径参数,用于进一步定义路由。例如,@Get(':id') 表示处理 /cats/:id 的 GET 请求。
参数装饰器
@Param(key?: string):用于获取路由参数。@Query(key?: string):用于获取查询参数。@Body():用于获取请求体。@Headers(name?: string):用于获取请求头。
依赖注入
Nest.js 使用依赖注入(DI)来管理控制器和服务之间的关系。通过在控制器的构造函数中注入服务,可以在控制器中使用该服务的功能。
模块注册
控制器需要在模块中注册才能生效。通过 @Module 装饰器的 controllers 数组来注册控制器。
@Module({
controllers: [CatsController],
})
export class CatsModule {}示例代码
以下是一个完整的控制器示例:
// www.javascriptcn.com code example
import { Controller, Get, Param, Post, Body } from '@nestjs/common';
import { CatsService } from './cats.service';
import { CreateCatDto } from './dto/create-cat.dto';
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Get()
findAll(): string {
return this.catsService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string): string {
return this.catsService.findOne(id);
}
@Post()
create(@Body() createCatDto: CreateCatDto): string {
return this.catsService.create(createCatDto);
}
}在这个示例中,CatsController 处理 /cats 路径下的请求,并通过 CatsService 来执行具体的业务逻辑。