一个常见的 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.ts
import { 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.ts
import { } from '@nestjs/common'
@Injectable()
export class UserService {
async getOne(id: string) {
// mock
return { id, name: 'web' }
}
}
在控制器里使用这个服务类
// user.controller.ts
import { Controller, Get, Param} from '@nestjs/common'
import { UserService } from './user.service.ts'
@Controller('user')
export class UserController {
// constructor 中注入 UserService
constructor(private userService: UserService) {}
@Get('/:id')
async getOne(@Param('id') id: string) {
// 使用 userService
return this.userService.getOne(id)
}
}
详细使用方法,请参考 提供者
Module
模块是具有 @Module 装饰器的类,@Module 装饰器提供了元数据,Nest 用它来组织应用程序结构。
一个应用通常有一个根模块,根模块下有多个子模块。
在上面,我们创建了 UserController 和 UserService,将它们放入同一个功能模块下,即 UserModule。
// user.module.ts
import { 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.ts
import { Module } from '@nestjs/common'
import { UserModule } from 'path/to/user.module'
@Module({
imports: [UserModule]
})
export class AppModule {}