一个常见的 RESTFull API 一般包含 controller、service、module 三部分:
--module--user--user.contorller.ts--user.service.ts--user.module.ts
Controller
控制器负责处理传入的请求和向客户端返回响应。
使用 @Controller() 定义控制器类。
使用 @Get() @Post() 等定义路由
使用 @Request() @Query() @Body() 等获取请求参数
// user.controller.tsimport { Controller, Get, Param} from '@nestjs/common'@Controller('user')export class UserController {@Get('/:id')async getOne(@Param('id') id: string) {// TODO 使用 id 获取用户return { id: 1, name: 'web' }}}
详细使用方法,请参考 控制器
Provider
provideer 是 Nest 的一个基本概念,provider 可以用过 constructor 注入依赖关系。
在前面,我们创建了一个简单的控制器 UserController,控制器应处理 HTTP 请求并将更复杂的任务委托给 providers。
我们使用 @Injectable() 声明一个 provider。
// user.service.tsimport { } from '@nestjs/common'@Injectable()export class UserService {async getOne(id: string) {// mockreturn { id, name: 'web' }}}
在控制器里使用这个服务类
// user.controller.tsimport { Controller, Get, Param} from '@nestjs/common'import { UserService } from './user.service.ts'@Controller('user')export class UserController {// constructor 中注入 UserServiceconstructor(private userService: UserService) {}@Get('/:id')async getOne(@Param('id') id: string) {// 使用 userServicereturn this.userService.getOne(id)}}
详细使用方法,请参考 提供者
Module
模块是具有 @Module 装饰器的类,@Module 装饰器提供了元数据,Nest 用它来组织应用程序结构。
一个应用通常有一个根模块,根模块下有多个子模块。
在上面,我们创建了 UserController 和 UserService,将它们放入同一个功能模块下,即 UserModule。
// user.module.tsimport { Module } from '@nestjs/common'import { UserController } from './user.controller'import { UserService } from './user.service'@Module({providers: [UserService],controllers: [UserController]})export class UserModule {}
详细使用方法,请参考 模块
现在一个完整的 user 模块已经完成,我们需要做的最后一件事是将这个模块导入根模块。
// app.module.tsimport { Module } from '@nestjs/common'import { UserModule } from 'path/to/user.module'@Module({imports: [UserModule]})export class AppModule {}
