路由 (Routing)
在 Nest.js 中,路由定义了客户端请求与服务器响应之间的映射关系。
每个路由关联一个 URI 和一个 HTTP 请求方法(如 GET、POST 等)。
控制器(Controllers)
控制器是管理路由请求的组件,通过类实现,并与模块(Modules)相关联。
在 Nest.js 中,用装饰器(Decorators)来定义控制器和路由规则:
@Controller()
装饰器定义一个基本的控制器。可传递一个路径前缀,这样所有的路由都会基于这个前缀。@Get()
,@Post()
,@Put()
,@Delete()
等装饰器用于定义具体的请求方法和路径。
typescript
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
在此例中,CatsController 控制器定义了一个 GET 请求的路由 /cats
,当请求到达时,将调用 findAll 方法并返回所有猫咪的信息。
服务(Service)
服务是 Nest.js 的核心概念之一,用于封装业务逻辑,如数据库交互、外部接口调用等。服务通过 @Injectable()
装饰器标注的类实现。
创建服务
服务可以通过 CLI 命令 nest generate service [name] 创建,或手动添加 @Injectable() 装饰器。例如:
typescript
import { Injectable } from '@nestjs/common';
@Injectable()
export class YourService {
// 业务逻辑方法
test() {
// 执行一些逻辑操作,返回处理后的结果
return result;
}
}
注入服务
服务可以注入到控制器或其他服务中,Nest.js 的依赖注入系统会自动实例化服务。例如:
typescript
import { Controller } from '@nestjs/common';
import { YourService } from './your.service';
@Controller('your-route')
export class YourController {
// 注入服务
constructor(private yourService: YourService) {}
// 使用 yourService 的方法
@Get()
find() {
this.yourService.test();
}
}
控制器通过调用服务方法来处理 HTTP 请求,并返回响应。
路由的设置
路由设置通过装饰器在控制器中定义,支持静态和动态路径。动态路径参数通过 @Param() 装饰器获取。例如:
typescript
import { Controller, Get, Param } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get(':id')
findOne(@Param('id') id: string): string {
return `This action returns a #${id} cat`;
}
}
访问 /cats/1
时,findOne 方法返回 This action returns a #1 cat
。
在 Nest.js 中,@Get()
和 @Post()
是两个常用的装饰器,它们分别用来处理 HTTP 的 GET 和 POST 请求。
@Get()
当客户端向服务器发送 GET 请求时,Nest.js 会调用使用了 @Get()
装饰器的方法来处理这个请求。
typescript
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
在上面的例子中,当客户端向 /cats
发送 GET 请求时,findAll()
方法会被调用,并返回所有猫咪的信息。
@Post()
当客户端向服务器发送 POST 请求时,Nest.js 会调用使用了 @Post()
装饰器的方法来处理这个请求。
typescript
import { Controller, Post } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Post()
create(): string {
return 'This action adds a new cat';
}
}
发送 POST 请求到 /cats
时,create() 方法被调用,添加新猫咪。