目錄
深入了解 NestJS 控制器(Controllers)
NestJS 是一個基於 TypeScript 的 Node.js 框架,旨在構建高效、可擴展的企業級伺服器端應用程序。它提供了模塊化的架構,讓開發者能夠快速開發和部署應用程序。控制器在 NestJS 中扮演著重要的角色,負責接收 HTTP 請求並返回響應,幫助開發者將應用程序的功能進行小型化分解。
控制器的定義與創建
控制器使用 @Controller()
裝飾器來定義,並接受一個字符串參數來指定路由前綴。
@Controller('users')
export class UsersController {
// ...
}
HTTP 方法裝飾器
控制器中的方法可以使用多種 HTTP 方法的裝飾器來定義,例如 @Get()
、@Post()
、@Put()
和 @Delete()
。
@Controller('users')
export class UsersController {
@Get('/')
getUsers() {
// 回傳用戶資料
}
}
使用拦截器、管道與守衛
控制器可以使用多種裝飾器來增強功能:
@UseInterceptors()
:添加拦截器,在方法調用之前或之後執行額外操作。
@Controller('users')
@UseInterceptors(LoggingInterceptor)
export class UsersController {
@Get('/')
getUsers() {
// ...
}
}
@UsePipes()
:添加管道,用於請求參數的驗證和轉換。@Controller('users')
@UsePipes(ValidationPipe)
export class UsersController {
@Post('/')
createUser(@Body() user: User) {
// ...
}
}
@UseGuards()
:添加守衛,檢查請求的有效性。@Controller('users')
@UseGuards(AuthGuard)
export class UsersController {
@Get('/')
getUsers() {
// ...
}
}
響應與請求處理
在 NestJS 控制器中,開發者可以使用以下裝飾器來處理 HTTP 響應和請求:
@Res()
:訪問 HTTP 響應對象。
@Controller('users')
export class UsersController {
@Get('/')
getUsers(@Res() res) {
res.status(HttpStatus.OK).send('OK');
}
}
@Req()
:訪問 HTTP 請求對象。@Controller('users')
export class UsersController {
@Get('/')
getUsers(@Req() req) {
const userId = req.query.userId;
// ...
}
}
@Param()
、@Body()
、@Query()
、@Headers()
等裝飾器用於獲取相應的請求參數。@Controller('users')
export class UsersController {
@Get('/:userId')
getUser(@Param('userId') userId: string) {
// ...
}
}
文件上傳與會話管理
控制器還可以處理文件上傳和會話管理:
@Controller('users')
export class UsersController {
@Post('/avatar')
@FileInterceptor('avatar')
uploadAvatar(@UploadedFile() avatar) {
// ...
}
}
常見錯誤排除
在開發過程中,可能會遇到一些常見的錯誤。以下是幾個排除建議:
- 確保所有裝飾器正確使用,並符合 NestJS 的規範。
- 檢查路由是否正確配置,確保控制器能夠正確處理請求。
- 使用日誌工具來追蹤錯誤,便於查找問題所在。
延伸應用
NestJS 控制器可擴展用於各種應用,從簡單的 RESTful API 到複雜的企業級應用。了解控制器的使用可以幫助開發者更好地組織和管理代碼,提高開發效率。
Q&A(常見問題解答)
Q1: NestJS 控制器的主要作用是什麼?
A1: NestJS 控制器的主要作用是接收 HTTP 請求並返回響應,幫助開發者將應用程序的功能分解為小型化的部分。
Q2: 如何在 NestJS 中使用管道進行請求參數的驗證?
A2: 可以使用 @UsePipes()
裝飾器來添加管道,對請求參數進行驗證和轉換。
Q3: NestJS 支持哪些 HTTP 方法的裝飾器?
A3: NestJS 支持多種 HTTP 方法的裝飾器,包括 @Get()
、@Post()
、@Put()
和 @Delete()
等。
—
此文章經過優化後,包含了最新的語法和最佳實踐,並附上了實作範例、錯誤排除建議及相關的延伸應用,讓讀者能夠更全面地掌握 NestJS 控制器的使用。